11. PI VS FP
Programmation impérative est un
paradigme de programmation qui décrit le
calcul en termes de déclarations qui
modifient l'état des programmes
Laprogrammation fonctionnelle est un
paradigme de programmation qui décrit le
calcul de l'évaluation des fonctions
mathématiques en évitant les états et la
mutabilité 11
12. FONCTION PURE
Composition de fonctions Pure
Avec les mêmes inputs on a toujours le même
résultat
Boite noire :
Pas de modifications
Pas d’écriture de messages pour l’utilisateur
Ni sur le disque
Pas d’effet de bord
12
13. EXEMPLES
f (x) = x2 + 1
Une fonction pure retourne des valeurs et ne fait
rien d’autres
g (a; b; c) = (a + b) * (c / 2) + f (a )
h (t) = h (t -1) + h (t -2 )
Les fonctions pures se composent que des
13
fonctions pures
14. Les langues qui
encouragent
l'utilisation des
fonctions pures sont
appelés langages
fonctionnels 14
15. Les langages impératifs
Description du calcul en termes de changements de
l'état
JAVA , C# , PHP
Séquencement d’opérations et action sur les variables en
mémoire
Effet de bord
15
16. L’affectation est une source d’effet
de bord
Les variables sont les causes des
problèmes dans les
environnements multi-thread
La mutabilité ainsi que le partage
d’ état n’est plus la mode
16
17. Transparence référentielle
int n = 2;
int inc(int k) { n = n + k; return n; }
incrémentation par effet de bord
inc(1) + inc(1)
!= 2 * inc (1 )
Avec les variables on oublie le
temps 17
18. x[t]= x0
x[t + 1] = x[t] + 1
A un instant donné, la valeur
de x est immutable.
X est l’identité d’une séquence
de valeurs dans le temps
18
21. If I were to pick a language to use on the JVM
today other than Java, it would be Scala.
– James Gosling, creator of Java
http://www.adam-
bien.com/roller/abien/entry/java_net_javaone_which_programming
My tip though for the long term replacement of javac is Scala.
I'm very impressed with it! I can honestly say if someone had
shown me the Programming in Scala book […] back in 2003
I'd probably have never created Groovy.
– James Strachan, creator of Groovy
http://macstrac.blogspot.com/2009/04/scala-as-long-term-replacement-for.html
Scala, it must be stated, is the current heir apparent to the
Java throne. No other language on the JVM seems as
capable of being a "replacement for Java" as Scala, and
the momentum behind Scala is now unquestionable.
21
– Charlies Nutter, JRuby lead
http://blog.headius.com/2009/04/future-part-one.html
22. “If Java programmers want to use features that
aren't present in the language, I think they're
probably best off using another language that targets
the JVM, such as Scala and Groovy“
Joshua Bloch
22
26. public class Person {
private int age;
private String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
} 26
27. public class Person {
private int age
private String name
public Person(int age, String name) {
this.age = age
this.name = name
}
public int getAge() {
return this.age
}
public void setAge(int age) {
this.age = age
}
public String getName() {
return this.name
}
public void setName(String name) {
this.name = name
}
} 27
45. CLASSES AND CONSTRUCTORS
class Person(val age: Int) {
def this() = this(42)
var name: String = _
override def toString = "My name is " + name
}
45
46. CASE CLASSES
case class Person(firstName: String, lastName: String)
val me = Person("slim", "ouertani")
val first = me.firstName
val last = me.lastName
if (me == Person(first, last)) {
println("Found myself!")
println(me)
}
Found myself!
Person(slim,ouertani) 46
47. PATTERN MATCHING
myObject match {
case 1 => println("First")
case 2 => println("Second")
case _ => println("Unknown")
}
47
48. PATTERN MATCHING
myObject match {
case i: Int => println("Found number " + i)
case s: String => println("Found text " + s)
case _ => println("Unknown")
}
48
49. PATTERN MATCHING
val email = """(.+)@(.+)""".r
"scala@java.no" match {
case email(name, domain) =>
println("User " + name + " at " + domain)
case x => println(x + " is not an email")
}
49