diff --git a/compendium/generated/quiz-w07-abstract-collections-solurows-generated.tex b/compendium/generated/quiz-w07-abstract-collections-solurows-generated.tex index 706d45ab9..a7b7b129f 100644 --- a/compendium/generated/quiz-w07-abstract-collections-solurows-generated.tex +++ b/compendium/generated/quiz-w07-abstract-collections-solurows-generated.tex @@ -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 \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w07-abstract-collections-taskrows-generated.tex b/compendium/generated/quiz-w07-abstract-collections-taskrows-generated.tex index 7e86b7eb1..1192ce84d 100644 --- a/compendium/generated/quiz-w07-abstract-collections-taskrows-generated.tex +++ b/compendium/generated/quiz-w07-abstract-collections-taskrows-generated.tex @@ -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 \\ \ No newline at end of file diff --git a/compendium/generated/w07-chaphead-generated.tex b/compendium/generated/w07-chaphead-generated.tex index 76405a413..0f2986f7e 100644 --- a/compendium/generated/w07-chaphead-generated.tex +++ b/compendium/generated/w07-chaphead-generated.tex @@ -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 diff --git a/compendium/modules/w09-setmap-exercise.tex b/compendium/modules/w09-setmap-exercise.tex index ce44aad40..98178d42a 100644 --- a/compendium/modules/w09-setmap-exercise.tex +++ b/compendium/modules/w09-setmap-exercise.tex @@ -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) diff --git a/img/collection/collection-traits.png b/img/collection/collection-traits.png index 65abca6fa..58c178e8f 100644 Binary files a/img/collection/collection-traits.png and b/img/collection/collection-traits.png differ diff --git a/plan/Plan.scala b/plan/Plan.scala index b403b770d..302daac0a 100644 --- a/plan/Plan.scala +++ b/plan/Plan.scala @@ -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, diff --git a/plan/module-plan-generated.html b/plan/module-plan-generated.html index 4bbe443ab..5ae146a60 100644 --- a/plan/module-plan-generated.html +++ b/plan/module-plan-generated.html @@ -33,7 +33,7 @@ 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 +ö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. diff --git a/plan/module-plan-generated.md b/plan/module-plan-generated.md index 23e66f14b..3aae1b111 100644 --- a/plan/module-plan-generated.md +++ b/plan/module-plan-generated.md @@ -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 | diff --git a/plan/module-plan-generated.tex b/plan/module-plan-generated.tex index 940c7a136..18faa356c 100644 --- a/plan/module-plan-generated.tex +++ b/plan/module-plan-generated.tex @@ -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 \\ diff --git a/quiz/QuizData.scala b/quiz/QuizData.scala index 77ec65a76..468fc2b3e 100644 --- a/quiz/QuizData.scala +++ b/quiz/QuizData.scala @@ -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), diff --git a/slides/body/lect-w07-seq.tex b/slides/body/lect-w07-seq.tex index d7bcd1ec3..239f1f8a4 100644 --- a/slides/body/lect-w07-seq.tex +++ b/slides/body/lect-w07-seq.tex @@ -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] } } @@ -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 diff --git a/slides/body/lect-w09-collections.tex b/slides/body/lect-w09-collections.tex index 5cdb6e48f..9c64f937b 100644 --- a/slides/body/lect-w09-collections.tex +++ b/slides/body/lect-w09-collections.tex @@ -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} @@ -395,20 +347,20 @@ -\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} @@ -416,8 +368,7 @@ 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} } @@ -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 @@ -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 \\ @@ -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 @@ -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}}. diff --git a/slides/generated/w07-overview-generated.tex b/slides/generated/w07-overview-generated.tex index 2feba619a..237ad082e 100644 --- a/slides/generated/w07-overview-generated.tex +++ b/slides/generated/w07-overview-generated.tex @@ -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 \\