Skip to content

Commit

Permalink
kill Traversable, migrate to 2.13
Browse files Browse the repository at this point in the history
  • Loading branch information
bjornregnell committed Jul 13, 2020
1 parent 7795db7 commit 635507f
Show file tree
Hide file tree
Showing 13 changed files with 47 additions and 101 deletions.
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
Traversable & 1 & ~~\Large$\leadsto$~~ & A & bastyp för alla samlingar, har metoden \code|foreach| \\
Iterable & 1 & ~~\Large$\leadsto$~~ & A & bastyp för alla samlingar, har metoden \code|foreach| \\
Iterable & 2 & ~~\Large$\leadsto$~~ & B & är traverserbar med hjälp av metoden \code|iterator| \\
Seq & 3 & ~~\Large$\leadsto$~~ & C & bastyp för alla sekvenssamlingar, indexposition från 0 \\
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
Traversable & 1 & & A & bastyp för alla samlingar, har metoden \code|foreach| \\
Iterable & 1 & & A & bastyp för alla samlingar, har metoden \code|foreach| \\
Iterable & 2 & & B & är traverserbar med hjälp av metoden \code|iterator| \\
Seq & 3 & & C & bastyp för alla sekvenssamlingar, indexposition från 0 \\
1 change: 0 additions & 1 deletion compendium/generated/w07-chaphead-generated.tex
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ \chapter{Sekvenser}\label{chapter:W07}
\begin{multicols}{2}\begin{itemize}[noitemsep,label={$\square$},leftmargin=*]
\item översikt av Scalas samlingsbibliotek och samlingsmetoder
\item klasshierarkin i scala.collection
\item Traversable
\item Iterable
\item Seq
\item List
Expand Down
2 changes: 1 addition & 1 deletion compendium/modules/w09-setmap-exercise.tex
Original file line number Diff line number Diff line change
Expand Up @@ -559,7 +559,7 @@

\Task \what~Vi ska nu utnyttja ett riktigt listigt trick för att via en enda kodrad implementera registrering med hjälp av samlingsmetoderna \code{groupBy} och \code{map}.

\Subtask Läs om metoden \code{groupBy} i snabbreferensen. Du hittar den under rubriken \emph{''Methods in trait \code{Traversable[A]}''} eftersom \code{groupBy} fungerar på alla samlingar. Testa \code{groupBy} enligt nedan och beskriv vad som händer.
\Subtask Läs om metoden \code{groupBy} i snabbreferensen. Du hittar den under rubriken \emph{''Methods in trait \code{Iterable[A]}''} eftersom \code{groupBy} fungerar på alla samlingar. Testa \code{groupBy} enligt nedan och beskriv vad som händer.

\begin{REPL}
scala> val xs = Vector(1, 1, 2, 2, 4, 4, 4).groupBy(x => x > 2)
Expand Down
Binary file modified img/collection/collection-traits.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion plan/Plan.scala
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ trait Plan {
Module("Sekvenser",
id = "sequences", exercise = "sequences", lab = "shuffle", contents = """
| översikt av Scalas samlingsbibliotek och samlingsmetoder,
| klasshierarkin i scala.collection, Traversable, Iterable,
| klasshierarkin i scala.collection, Iterable,
| Seq, List, ListBuffer, ArrayBuffer, WrappedArray,
| sekvensalgoritm, algoritm: SEQ-COPY,
| in-place vs copy, algoritm: SEQ-REVERSE,
Expand Down
2 changes: 1 addition & 1 deletion plan/module-plan-generated.html
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
<tr>
<td align="left">W07</td>
<td align="left"><a href="https://fileadmin.cs.lth.se/pgk/lect-w07.pdf">Sekvenser</a></td>
<td align="left">översikt av Scalas samlingsbibliotek och samlingsmetoder, klasshierarkin i scala.collection, Traversable, Iterable, Seq, List, ListBuffer, ArrayBuffer, WrappedArray, sekvensalgoritm, algoritm: SEQ-COPY, in-place vs copy, algoritm: SEQ-REVERSE, registrering, algoritm: SEQ-REGISTER, linjärsökning, algoritm: LINEAR-SEARCH, tidskomplexitet, minneskomplexitet, sekvenser i Java vs Scala, for-sats i Java, java.util.Scanner, översikt strängmetoder, StringBuilder, ordning, inbyggda sökmetoder, find, indexOf, indexWhere, inbyggda sorteringsmetoder, sorted, sortWith, sortBy, repeterade parametrar</td></tr>
<td align="left">översikt av Scalas samlingsbibliotek och samlingsmetoder, klasshierarkin i scala.collection, Iterable, Seq, List, ListBuffer, ArrayBuffer, WrappedArray, sekvensalgoritm, algoritm: SEQ-COPY, in-place vs copy, algoritm: SEQ-REVERSE, registrering, algoritm: SEQ-REGISTER, linjärsökning, algoritm: LINEAR-SEARCH, tidskomplexitet, minneskomplexitet, sekvenser i Java vs Scala, for-sats i Java, java.util.Scanner, översikt strängmetoder, StringBuilder, ordning, inbyggda sökmetoder, find, indexOf, indexWhere, inbyggda sorteringsmetoder, sorted, sortWith, sortBy, repeterade parametrar</td></tr>
<tr>
<td align="left">KS</td>
<td align="left">KONTROLLSKRIVN.</td>
Expand Down
2 changes: 1 addition & 1 deletion plan/module-plan-generated.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
| W04 | Objekt | modul, singelobjekt, paket, punktnotation, tillstånd, medlem, attribut, metod, paket, import, filstruktur, jar, dokumentation, programlayout, JDK, import, selektiv import, namnbyte vid import, tupel, multipla returvärden, block, lokal variabel, skuggning, lokal funktion, funktioner är objekt med apply-metod, namnrymd, synlighet, privat medlem, inkapsling, getter och setter, principen om uniform access, överlagring av metoder, introprog.PixelWindow, initialisering, lazy val, värdeandrop, namnanrop, typalias |
| W05 | Klasser | objektorientering, klass, instans, Point, Square, Complex, Any, isInstanceOf, toString, new, null, this, accessregler, private, private[this], klassparameter, primär konstruktor, fabriksmetod, alternativ konstruktor, förändringsbar, oföränderlig, case-klass, kompanjonsobjekt, referenslikhet, innehållslikhet, eq, == |
| W06 | Mönster, undantag | mönstermatchning, match, Option, throw, try, catch, Try, unapply, sealed, flatten, flatMap, partiella funktioner, collect, wildcard-mönster, variabelbindning i mönster, sekvens-wildcard, bokstavliga mönster, implementera equals, hashcode, exempel: equals för klassen Complex, switch-sats i Java |
| W07 | Sekvenser | översikt av Scalas samlingsbibliotek och samlingsmetoder, klasshierarkin i scala.collection, Traversable, Iterable, Seq, List, ListBuffer, ArrayBuffer, WrappedArray, sekvensalgoritm, algoritm: SEQ-COPY, in-place vs copy, algoritm: SEQ-REVERSE, registrering, algoritm: SEQ-REGISTER, linjärsökning, algoritm: LINEAR-SEARCH, tidskomplexitet, minneskomplexitet, sekvenser i Java vs Scala, for-sats i Java, java.util.Scanner, översikt strängmetoder, StringBuilder, ordning, inbyggda sökmetoder, find, indexOf, indexWhere, inbyggda sorteringsmetoder, sorted, sortWith, sortBy, repeterade parametrar |
| W07 | Sekvenser | översikt av Scalas samlingsbibliotek och samlingsmetoder, klasshierarkin i scala.collection, Iterable, Seq, List, ListBuffer, ArrayBuffer, WrappedArray, sekvensalgoritm, algoritm: SEQ-COPY, in-place vs copy, algoritm: SEQ-REVERSE, registrering, algoritm: SEQ-REGISTER, linjärsökning, algoritm: LINEAR-SEARCH, tidskomplexitet, minneskomplexitet, sekvenser i Java vs Scala, for-sats i Java, java.util.Scanner, översikt strängmetoder, StringBuilder, ordning, inbyggda sökmetoder, find, indexOf, indexWhere, inbyggda sorteringsmetoder, sorted, sortWith, sortBy, repeterade parametrar |
| KS | KONTROLLSKRIVN. | |
| W08 | Matriser, typparametrar | matris, nästlad samling, nästlad for-sats, typparameter, generisk funktion, generisk klass, fri vs bunden typparameter, generisk samling som typparameter, matriser i Java vs Scala, allokering av nästlade arrayer i Scala och Java |
| W09 | Mängder, tabeller | innehållstest, mängd, Set, mutable.Set, nyckel-värde-tabell, Map, mutable.Map, hash code, java.util.HashMap, java.util.HashSet, persistens, serialisering, textfiler, Source.fromFile, java.nio.file, repetition inför kontrollskrivning |
Expand Down
2 changes: 1 addition & 1 deletion plan/module-plan-generated.tex
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
W04 & Objekt & modul, singelobjekt, paket, punktnotation, tillstånd, medlem, attribut, metod, paket, import, filstruktur, jar, dokumentation, programlayout, JDK, import, selektiv import, namnbyte vid import, tupel, multipla returvärden, block, lokal variabel, skuggning, lokal funktion, funktioner är objekt med apply-metod, namnrymd, synlighet, privat medlem, inkapsling, getter och setter, principen om uniform access, överlagring av metoder, introprog.PixelWindow, initialisering, lazy val, värdeandrop, namnanrop, typalias \\
W05 & Klasser & objektorientering, klass, instans, Point, Square, Complex, Any, isInstanceOf, toString, new, null, this, accessregler, private, private[this], klassparameter, primär konstruktor, fabriksmetod, alternativ konstruktor, förändringsbar, oföränderlig, case-klass, kompanjonsobjekt, referenslikhet, innehållslikhet, eq, == \\
W06 & Mönster, undantag & mönstermatchning, match, Option, throw, try, catch, Try, unapply, sealed, flatten, flatMap, partiella funktioner, collect, wildcard-mönster, variabelbindning i mönster, sekvens-wildcard, bokstavliga mönster, implementera equals, hashcode, exempel: equals för klassen Complex, switch-sats i Java \\
W07 & Sekvenser & översikt av Scalas samlingsbibliotek och samlingsmetoder, klasshierarkin i scala.collection, Traversable, Iterable, Seq, List, ListBuffer, ArrayBuffer, WrappedArray, sekvensalgoritm, algoritm: SEQ-COPY, in-place vs copy, algoritm: SEQ-REVERSE, registrering, algoritm: SEQ-REGISTER, linjärsökning, algoritm: LINEAR-SEARCH, tidskomplexitet, minneskomplexitet, sekvenser i Java vs Scala, for-sats i Java, java.util.Scanner, översikt strängmetoder, StringBuilder, ordning, inbyggda sökmetoder, find, indexOf, indexWhere, inbyggda sorteringsmetoder, sorted, sortWith, sortBy, repeterade parametrar \\
W07 & Sekvenser & översikt av Scalas samlingsbibliotek och samlingsmetoder, klasshierarkin i scala.collection, Iterable, Seq, List, ListBuffer, ArrayBuffer, WrappedArray, sekvensalgoritm, algoritm: SEQ-COPY, in-place vs copy, algoritm: SEQ-REVERSE, registrering, algoritm: SEQ-REGISTER, linjärsökning, algoritm: LINEAR-SEARCH, tidskomplexitet, minneskomplexitet, sekvenser i Java vs Scala, for-sats i Java, java.util.Scanner, översikt strängmetoder, StringBuilder, ordning, inbyggda sökmetoder, find, indexOf, indexWhere, inbyggda sorteringsmetoder, sorted, sortWith, sortBy, repeterade parametrar \\
KS & \multicolumn{2}{l}{KONTROLLSKRIVN.} \\
W08 & Matriser, typparametrar & matris, nästlad samling, nästlad for-sats, typparameter, generisk funktion, generisk klass, fri vs bunden typparameter, generisk samling som typparameter, matriser i Java vs Scala, allokering av nästlade arrayer i Scala och Java \\
W09 & Mängder, tabeller & innehållstest, mängd, Set, mutable.Set, nyckel-värde-tabell, Map, mutable.Map, hash code, java.util.HashMap, java.util.HashSet, persistens, serialisering, textfiler, Source.fromFile, java.nio.file, repetition inför kontrollskrivning \\
Expand Down
6 changes: 3 additions & 3 deletions quiz/QuizData.scala
Original file line number Diff line number Diff line change
Expand Up @@ -305,9 +305,9 @@ object QuizData { // to generate tables for a concept connection quizes in late
).filter(_._1.trim.nonEmpty),

QuizID("quiz-w07-abstract-collections") -> Vector( //sequences
"Traversable " -> "bastyp för alla samlingar, har metoden \\code|foreach|",
"Iterable " -> "är traverserbar med hjälp av metoden \\code|iterator|",
"Seq " -> "bastyp för alla sekvenssamlingar, indexposition från 0",
"Iterable " -> "bastyp för alla samlingar, har metoden \\code|foreach|",
"Iterable " -> "är traverserbar med hjälp av metoden \\code|iterator|",
"Seq " -> "bastyp för alla sekvenssamlingar, indexposition från 0",
"" -> ""
).filter(_._1.trim.nonEmpty),

Expand Down
24 changes: 9 additions & 15 deletions slides/body/lect-w07-seq.tex
Original file line number Diff line number Diff line change
Expand Up @@ -377,32 +377,26 @@
\end{Slide}


\begin{Slide}{Hierarki av samlingstyper i \texttt{scala.collection} v2.12}
\begin{Slide}{Hierarki av samlingstyper i \texttt{scala.collection} v2.13}

\begin{multicols}{2}
\begin{tikzpicture}[sibling distance=6.1em,->,>=stealth', inner sep=3pt, %scale=0.5,
\begin{tikzpicture}[sibling distance=5.0em,->,>=stealth', inner sep=3pt, %scale=0.5,
every node/.style = {shape=rectangle, draw, align=center,font=\small\ttfamily},
class/.style = {fill=blue!20},
trait/.style = {rounded corners, fill=red!20}]
\node[trait] {Traversable}
child { node[trait] {Iterable}
child { node[trait] {Seq}
}
child { node[trait] {Set}
}
child { node[trait] {Map}
}
};
\node[trait] {Iterable}
child { node[trait] {Seq} }
child { node[trait] {Set} }
child { node[trait] {Map} }
;
\end{tikzpicture}

\columnbreak

{\SlideFontTiny

\code{Traversable} har metoder som är implementerade med hjälp av: \\
\code{Iterable} har metoder som är implementerade med hjälp av: \\
\code{def foreach[U](f: Elem => U): Unit}\\

\vspace{1em}\code{Iterable} har metoder som är implementerade med hjälp av: \\
\code{def iterator: Iterator[A] }

}
Expand All @@ -416,7 +410,7 @@

\end{multicols}

{\SlideFontSmall Samlingen \Emph{\texttt{Vector}} är en \code{Seq} som är en \code{Iterable} som är en \code{Traversable}. \\ \vspace{0.5em}\pause
{\SlideFontSmall Samlingen \Emph{\texttt{Vector}} är en \code{Seq} som är en \code{Iterable}. \\ \vspace{0.5em}\pause
De konkreta samlingarna är uppdelade i dessa paket:\\
\code{scala.collection.immutable} \hfill som är \Emph{automatiskt} importerade\\
\code{scala.collection.mutable} \hfill som \Alert{måste importeras} explicit\\\pause
Expand Down
102 changes: 28 additions & 74 deletions slides/body/lect-w09-collections.tex
Original file line number Diff line number Diff line change
Expand Up @@ -276,54 +276,6 @@



\begin{Slide}{Hierarki av samlingstyper i \texttt{scala.collection} v2.12}

\begin{multicols}{2}
\begin{tikzpicture}[sibling distance=6.1em,->,>=stealth', inner sep=3pt, %scale=0.5,
every node/.style = {shape=rectangle, draw, align=center,font=\small\ttfamily},
class/.style = {fill=blue!20},
trait/.style = {rounded corners, fill=red!20}]
\node[trait] {Traversable}
child { node[trait] {Iterable}
child { node[trait] {Seq}
}
child { node[trait] {Set}
}
child { node[trait] {Map}
}
};
\end{tikzpicture}

\columnbreak

{\SlideFontTiny

\code{Traversable} har metoder som är implementerade med hjälp av: \\
\code{def foreach[U](f: Elem => U): Unit}\\

\vspace{1em}\code{Iterable} har metoder som är implementerade med hjälp av: \\
\code{def iterator: Iterator[A] }

}

\begin{itemize}\SlideFontTiny
\item[] \code{Seq}: ordnade i sekvens
\item[] \code{Set}: unika element
\item[] \code{Map}: par av (nyckel, värde)
\end{itemize}


\end{multicols}

{\SlideFontSmall Samlingen \Emph{\texttt{Vector}} är en \code{Seq} som är en \code{Iterable} som är en \code{Traversable}. \\ \vspace{0.5em}\pause
De konkreta samlingarna är uppdelade i dessa paket:\\
\code{scala.collection.immutable} \hfill som är \Emph{automatiskt} importerade\\
\code{scala.collection.mutable} \hfill som \Alert{måste importeras} explicit\\\pause
(undantag: primitiva \code{scala.Array} som är automatiskt synlig)
}
\end{Slide}


\begin{Slide}{Hierarki av samlingstyper i \texttt{scala.collection} v2.13}

\begin{multicols}{2}
Expand Down Expand Up @@ -395,29 +347,28 @@



\ifkompendium
\else
\begin{Slide}{Hierarki av samlingar i scala.collection v2.12}\SlideFontTiny
\includegraphics[width=0.95\textwidth]{../img/collection/collection-traits}\\
%\noindent Läs mer om Scalas samlingar här: \\
\url{https://docs.scala-lang.org/overviews/collections/overview.html}
\end{Slide}
\fi
% \ifkompendium
% \else
% \begin{Slide}{Hierarki av samlingar i scala.collection v2.12}\SlideFontTiny
% \includegraphics[width=0.6\textwidth]{../img/collection/collection-traits}\\
% %\noindent Läs mer om Scalas samlingar här: \\
% \url{https://docs.scala-lang.org/overviews/collections/overview.html}
% \end{Slide}
% \fi





\begin{Slide}{Mer specifika samlingstyper i \texttt{scala.collection} v2.12}
\begin{Slide}{Mer specifika samlingstyper i \texttt{scala.collection}}
Det finns \Alert{mer specifika} \Emph{subtyper} av \code{Seq}, \code{Set} och \code{Map}:
\\ \vspace{1em}

\begin{tikzpicture}[sibling distance=5.8em,->,>=stealth', inner sep=3pt, %scale=0.5,
every node/.style = {shape=rectangle, draw, align=center,font=\small\ttfamily},
class/.style = {fill=blue!20},
trait/.style = {rounded corners, fill=red!20}]
\node[trait] {Traversable}
child { node[trait] {Iterable}
\node[trait] {Iterable}
child { node[trait, xshift=-2.4cm] {Seq}
child { node[trait] {IndexedSeq} }
child { node[trait] {LinearSeq} }
Expand All @@ -428,13 +379,18 @@
}
child { node[trait, xshift=1.0cm] {Map}
child { node[trait] {SortedMap} }
}
};
\end{tikzpicture}

\vspace{0.5em}
\pause\vspace{0.5em}
\Emph{\texttt{Vector}} är en \Alert{\texttt{IndexedSeq}} medan
\Emph{\texttt{List}} är en \Alert{\texttt{LinearSeq}}.

\pause\vspace{1em}{\SlideFontSmall
\href
{https://docs.scala-lang.org/overviews/collections-2.13/overview.html}
{docs.scala-lang.org/overviews/collections-2.13/overview.html}
}
\end{Slide}

\begin{Slide}{Några oföränderliga och förändringsbara sekvenssamlingar}\SlideFontSmall
Expand Down Expand Up @@ -463,7 +419,7 @@

\begin{Slide}{Några användbara metoder på samlingar}\SlideFontTiny
\begin{tabular}{r r l}\hline
\texttt{\Emph{Traversable}}
\texttt{\Emph{Iterable}}
& \code|xs.size| & antal elementet \\
& \code|xs.head| & första elementet \\
& \code|xs.last| & sista elementet \\
Expand All @@ -473,9 +429,7 @@
& \code|xs.map(f)| & gör \code|f| på alla element, ger ny samling \\
& \code|xs.filter(p)| & ny samling med bara de element där p är sant\\
& \code|xs.groupBy(f)| & ger en \code|Map| som grupperar värdena enligt f\\
& \code|xs.mkString(",")| & en kommaseparerad sträng med alla element\\ \hline

\texttt{\Emph{Iterable}}
& \code|xs.mkString(",")| & en kommaseparerad sträng med alla element\\
& \code|xs.zip(ys)| & ny samling med par (x, y); ''zippa ihop'' xs och ys \\
& \code|xs.zipWithIndex| & ger en \code|Map| med par (x, index för x) \\
& \code|xs.sliding(n)| & ny samling av samlingar genom glidande ''fönster''\\ \hline
Expand Down Expand Up @@ -554,19 +508,19 @@
\end{Slide}


\ifkompendium\else
% \ifkompendium\else

\begin{Slide}{scala.collection.immutable}
\includegraphics[width=0.67\textwidth]{../img/collection/collection-immutable}~~%
\includegraphics[width=0.3\textwidth]{../img/collection/collection-legend}
\end{Slide}
% \begin{Slide}{scala.collection.immutable}
% \includegraphics[width=0.67\textwidth]{../img/collection/collection-immutable}~~%
% \includegraphics[width=0.3\textwidth]{../img/collection/collection-legend}
% \end{Slide}


\begin{Slide}{scala.collection.mutable}
\includegraphics[width=1.05\textwidth]{../img/collection/collection-mutable}
\end{Slide}
% \begin{Slide}{scala.collection.mutable}
% \includegraphics[width=1.05\textwidth]{../img/collection/collection-mutable}
% \end{Slide}

\fi
% \fi

\begin{Slide}{Strängar är implicit en \texttt{IndexedSeq[Char]}}\SlideFontSmall
Det finns en så kallad \Emph{implicit konvertering} mellan \code{String} och \code{IndexedSeq[Char]} vilket gör att \Alert{alla samlingsmetoder på \texttt{Seq} även funkar på strängar} och även flera andra smidiga strängmetoder erbjuds \Alert{utöver} de som finns i \href{http://docs.oracle.com/javase/8/docs/api/java/lang/String.html}{\code{java.lang.String}} genom klassen \href{http://www.scala-lang.org/api/current/scala/collection/immutable/StringOps.html}{\code{StringOps}}.
Expand Down
1 change: 0 additions & 1 deletion slides/generated/w07-overview-generated.tex
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
\begin{multicols}{3}\SlideFontTiny
$\square$ översikt av Scalas samlingsbibliotek och samlingsmetoder \\
$\square$ klasshierarkin i scala.collection \\
$\square$ Traversable \\
$\square$ Iterable \\
$\square$ Seq \\
$\square$ List \\
Expand Down

0 comments on commit 635507f

Please sign in to comment.