You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
| <spanclass="label success">Good</span> `def f(x: Int) = { x*x }`<br> <spanclass="label important">Bad</span> `def f(x: Int) { x*x }`| définition d'une fonction <br> erreur cachée : sans le = c'est une procédure qui retourne un Unit ; occasionnant des problèmes incontrôlés. |
20
-
| <spanclass="label success">Good</span> `def f(x: Any) = println(x)`<br> <spanclass="label important">Bad</span> `def f(x) = println(x)`| définition d'une fonction <br> erreur de syntaxe : chaque argument à besoin d'être typés. |
20
+
| <spanclass="label success">Good</span> `def f(x: Any) = println(x)`<br> <spanclass="label important">Bad</span> `def f(x) = println(x)`| définition d'une fonction <br> erreur de syntaxe : chaque argument a besoin d'être typé. |
21
21
|`type R = Double`| alias de type |
22
22
|`def f(x: R)` vs.<br> `def f(x: => R)`| appel par valeur <br> appel par nom (paramètres paresseux (lazy)) |
23
23
|`(x:R) => x*x`| fonction anonyme |
24
24
|`(1 to 5).map(_*2)` vs.<br> `(1 to 5).reduceLeft( _+_ )`| fonction anonyme : l'underscore est associé à la position du paramètre en argument. |
25
25
|`(1 to 5).map( x => x*x )`| fonction anonyme : pour utiliser un argument deux fois, il faut le nommer. |
26
-
| <spanclass="label success">Good</span> `(1 to 5).map(2*)`<br> <spanclass="label important">Bad</span> `(1 to 5).map(*2)`| fonction anonyme : méthode bornée et infixée. Il faut utiliser `2*_` pour le bien. |
27
-
|`(1 to 5).map { val x=_*2; println(x); x }`| fonction anonyme : la dernière expression d'un bloc est celle qui est retournée. |
26
+
| <spanclass="label success">Good</span> `(1 to 5).map(2*)`<br> <spanclass="label important">Bad</span> `(1 to 5).map(*2)`| fonction anonyme : méthode bornée et infixée. Pour votre santé, préférez la syntaxe `2*_`. |
27
+
|`(1 to 5).map { x => val y=x*2; println(y); y }`| fonction anonyme : la dernière expression d'un bloc est celle qui est retournée. |
28
28
|`(1 to 5) filter {_%2 == 0} map {_*2}`| fonctions anonymes : style "pipeline". (ou avec des parenthèses). |
29
29
|`def compose(g:R=>R, h:R=>R) = (x:R) => g(h(x))` <br> `val f = compose({_*2}, {_-1})`| fonctions anonymes : pour passer plusieurs blocs, il faut les entourer par des parenthèses. |
|`def zscore(mean:R, sd:R)(x:R) = (x-mean)/sd`| curryfication, sucre syntaxique. mais alors : |
33
-
|`val normer = zscore(7, 0.4)_`| il faut traiter l'underscore dans la fonction partielle, mais ceci uniquement pour la version avec le sucre syntaxique. |
33
+
|`val normer = zscore(7, 0.4)_`| il faut ajouter l'underscore dans la fonction partielle, mais ceci uniquement pour la version avec le sucre syntaxique. |
34
34
|`def mapmake[T](g:T=>T)(seq: List[T]) = seq.map(g)`| type générique. |
35
35
|`5.+(3); 5 + 3` <br> `(1 to 5) map (_*2)`| sucre syntaxique pour opérateurs infixés. |
|`do { println(x); x += 1} while (x < 5)`| boucle do while. |
57
57
|`import scala.util.control.Breaks._`<br>`breakable {`<br>` for (x <- xs) {`<br>` if (Math.random < 0.1) break`<br>` }`<br>`}`| break. ([transparents](http://www.slideshare.net/Odersky/fosdem-2009-1013261/21)) |
58
-
|`for (x <- xs if x%2 == 0) yield x*10`_est équivalent à_ <br>`xs.filter(_%2 == 0).map(_*10)`|pour la compréhension : filter/map |
59
-
|`for ((x,y) <- xs zip ys) yield x*y`_est équivalent à_ <br>`(xs zip ys) map { case (x,y) => x*y }`|pour la compréhension : liaison déstructurée |
60
-
|`for (x <- xs; y <- ys) yield x*y`_est équivalent à_ <br>`xs flatMap {x => ys map {y => x*y}}`|pour la compréhension : produit cartésien. |
61
-
|`for (x <- xs; y <- ys) {`<br> `println("%d/%d = %.1f".format(x,y, x*y))`<br>`}`|pour la compréhension : à la manière impérative <br>[sprintf-style](http://java.sun.com/javase/6/docs/api/java/util/Formatter.html#syntax)|
62
-
|`for (i <- 1 to 5) {`<br> `println(i)`<br>`}`|pour la compréhension : itère jusqu'à la borne supérieure comprise. |
63
-
|`for (i <- 1 until 5) {`<br> `println(i)`<br>`}`|pour la compréhension : itère jusqu'à la borne supérieure non comprise. |
| <spanclass="label success">Good</span> `(xs zip ys) map { case (x,y) => x*y }`<br> <spanclass="label important">Bad</span> `(xs zip ys) map( (x,y) => x*y )`| cas d’utilisation d’une fonction utilisée avec un "pattern matching". |
66
66
| <spanclass="label important">Bad</span><br>`val v42 = 42`<br>`Some(3) match {`<br>` case Some(v42) => println("42")`<br>` case _ => println("Not 42")`<br>`}`| "v42" est interprété comme un nom ayant n’importe quelle valeur de type Int, donc "42" est affiché. |
|`class C(x: R)`_est équivalent à_ <br>`class C(private val x: R)`<br>`var c = new C(4)`| paramètres du constructeur - privé |
71
71
|`class C(val x: R)`<br>`var c = new C(4)`<br>`c.x`| paramètres du constructeur - public |
72
-
|`class C(var x: R) {`<br>`assert(x > 0, "positive please")`<br>`var y = x`<br>`val readonly = 5`<br>`private var secret = 1`<br>`def this = this(42)`<br>`}`|<br>le constructeur est dans le corps de la classe<br>déclare un membre public<br>are un accesseur<br>déclare un membre privé<br>constructeur alternatif |
72
+
|`class C(var x: R) {`<br>`assert(x > 0, "positive please")`<br>`var y = x`<br>`val readonly = 5`<br>`private var secret = 1`<br>`def this = this(42)`<br>`}`|<br>le constructeur est dans le corps de la classe<br>déclare un membre public<br>déclare un accesseur<br>déclare un membre privé<br>constructeur alternatif |
73
73
|`new{ ... }`| classe anonyme |
74
74
|`abstract class D { ... }`| définition d’une classe abstraite. (qui n’est pas instanciable). |
75
75
|`class C extends D { ... }`| définition d’une classe qui hérite d’une autre. |
0 commit comments