SlideShare uma empresa Scribd logo
1 de 61
Baixar para ler offline
DE JAVA À SWIFT  
EN 2 TEMPS  
TROIS MOUVEMENTS
3 novembre 2016
( )Didier Plaindoux @dplaindoux
Computer scientist Freelance
λ
Développement lancé en 2010 par Chris Lattner
HISTORIQUE DE SWIFT
v1.0: Dévoilé durant la WWDC en 2014
v2.0: Ouverture du compilateur en 2015
v3.0: Publication en septembre 2016
DÉVELOPPER AVEC SWIFT
XCode CLion Vi, Emacs
EXÉCUTER SWIFT
iOS, OSX Version 14.04+
(Docker)
IBM Cloud
(LinuxOne)
LANGAGE INSPIRÉ PAR ...
Objective-C
C#
Orienté Objet
Haskell
OCaml
Fonctionnel
Ruby
Python
Expressivité
MÉTAMORPHOSE D'UNE CLASSE JAVA
public class Personne {
private final String nom;
private int age;
public Personne(String nom, int age) {
this.nom = nom;
this.age = age;
}
public void anniversaire() {
this.age += 1;
}
}
SÉPARATEURS
public class Personne {
private final String nom
private int age
public Personne(String nom, int age) {
this.nom = nom
this.age = age
}
public void anniversaire() {
this.age += 1
}
}
ATTRIBUTS
public class Personne {
private let nom:String // Constant
private var age:Int // Variable
public Personne(String nom, int age) {
this.nom = nom
this.age = age
}
public void anniversaire() {
this.age += 1
}
}
PARAMÈTRES
public class Personne {
private let nom:String
private var age:Int
public Personne(nom:String, age:Int) {
this.nom = nom
this.age = age
}
public void anniversaire() {
this.age += 1
}
}
INITIALISATION
public class Personne {
private let nom:String
private var age:Int
public init(nom:String, age:Int) {
this.nom = nom
this.age = age
}
public void anniversaire() {
this.age += 1
}
}
FONCTION
public class Personne {
private let nom:String
private var age:Int
public init(nom:String, age:Int) {
this.nom = nom
this.age = age
}
public func anniversaire() -> Void {
this.age += 1
}
}
FONCTION OU PROCÉDURE
public class Personne {
private let nom:String
private var age:Int
public init(nom:String, age:Int) {
this.nom = nom
this.age = age
}
public func anniversaire() {
this.age += 1
}
}
UNE CLASSE SWIFT
public class Personne {
private let nom:String
private var age:Int
public init(nom:String, age:Int) {
self.nom = nom
self.age = age
}
public func anniversaire() {
self.age += 1
}
}
SURVOL DU LANGAGE
DONNÉES, TYPES INITIAUX ETC.
Le Fonctionnel
Les Objets
VARIABLES OU CONSTANTES
JAVA SWIFT
int age
final String nom
var age:Int
let nom:String
LES COLLECTIONS
JAVA SWIFT
Arrays.asList("Hello", "World")
Map<String, Integer> m = new HashMap<>();
m.put("A", 10);
m.put("B", 20);
["Hello", "World"]
["A":10, "B":20]
Fonctions disponibles map, atMap, lter etc.
DONNÉE OPTIONNELLE
JAVA SWIFT
Optional<String> n =
Optional.of("A");
Optional<Integer> t =
n.map(v -> v.length());
if (t.isPresent()) {
// t.get();
}
let n:String? = "A" // ou nil
let t:Int? =
n?.characters.count
if let taille = t {
// taille utilisable
}
Fonctions disponibles map, atMap, lter etc.
Donnée optionnelle "portée" par le typage uniquement. Non structurel !
TUPLES
JAVA
∅
SWIFT
Index ↔Nom
(42, "John Doe") // (Int, String)
(42, "John Doe").1 == "John Doe"
(42, nom:"John Doe") // (Int, String)
(42, nom:"John Doe").1 == "John Doe"
(42, nom:"John Doe").nom == "John Doe"
STRUCTURES DE CONTRÔLE
Sélection conditionnelle
Garde pour les optionnels
Répétition
if expression {
// bloc en cas de succés
} else {
// bloc optionnel en cas d'échec
}
guard let valeur = expression else {
// valeur n'est pas définie
}
// valeur est définie
let segment = 0..<100
for index in segment {
// bloc répété
}
Données, Types initiaux etc.
LE FONCTIONNEL
Les Objets
TYPE FONCTIONNEL
JAVA SWIFT
Type aliasing
Function<A,B>
Supplier<B>
Consumer<A>
Predicate<A>
...
(A) -> B
() -> B
(A) -> ()
(A) -> Bool
...
typealias Supplier<B> = () -> B
FONCTION
func Nom(Parametres) -> Type Resultat { Corps De La Fonction }
FONCTION :: PARAMÈTRES
func multiplier(a:Int, b:Int) -> Int { return a * b }
En interne les noms des paramètres capturent les valeurs lors de l'appel
multiplier(a:2, b:3)
En externe les noms des paramètres servent de "marques" pour les arguments
Permutation des arguments interdite
FONCTION :: NOM EXTERNE SPÉCIFIQUE
Spéci cation d'un nom externe di érent
func multiplier(a:Int, par b:Int) -> Int {
return multiplier(a:a, b:b)
}
multiplier(a:2, par:3)
FONCTION :: AUCUN NOM EXTERNE
Spéci cation a n de ne pas avoir de nom externe
func multiplier( _ a:Int, par b:Int) -> Int {
return multiplier(a:a, b:b)
}
multiplier(2, par:3)
FONCTION ANONYME :: CLOSURE
JAVA
SWIFT
[Parametres] -> [Corps De La Fonction]
{ [Parametres] -> [Type Retour] in [Corps De La Fonction] }
{ [Parametres] in [Corps De La Fonction] }
Objet de Première Classe
CLOSURE :: EXEMPLES
let multiplier = { (a:Int, b:Int) -> Int in a * b }
Pas de séléction par nommage des paramètres car inutile !
multiplier(2,3)
CLOSURE :: SYNTHÈSE DE TYPE
let multiplier = { (a:Int,b:Int) in a * b }
let multiplier = { (a,b:Int) in a * b }
let multiplier = { a,b -> Int in a * b }
// (Int, Int) -> Int
CLOSURE :: SYNTHÈSE DE TYPE
let multiplier = { a,b in a * b }
error ambiguous use of operator '*'
Int ? Float ? Double ? ...
CLOSURE :: SYNTHÈSE DE TYPE !
let multiplier : (Int,Int) -> Int = { a,b in a * b }
Spéci cation vs. Mise en oeuvre
FONCTION :: ORDRE SUPÉRIEUR
Fonction qui manipule une fonction
func appliquer(_ f:(Int) -> Int, _ a:Int) -> Int {
return f(a)
}
// appliquer(f,a) ⟶* f(a)
Forme restreinte au type Int → Int !
FONCTION :: GÉNÉRICITÉ
Paramétrisation à la C++, Java, C#
func appliquer<A,B>(_ f:(A) -> B, _ a:A) -> B { return f(a) }
Possibilité de spéci er des contraintes
func estEgal<A:Equatable>(_ a:A, _ b:A) -> Bool { return a == b }
INCONSISTANCE & PIÈCES MANQUANTES
η-conversion pas généralisable
en présence de surcharges équivalentes
Récursivité terminale Non garantie par le compilateur
Compréhension Concept inexistant
{ x in f(x) } ≡? f
Données, Types initiaux etcs.
Le Fonctionnel
LES OBJETS
LES OBJETS
Ecole Scandinave
Simula, C++, Objective-C, Ei el, Java, C# ... Swift
Abstraction de donnée ↔Classe ↔Type
Repose sur un Typage Statique
PARADIGME OBJET
JAVA SWIFT
Interface Protocole
Classe Classe
∅ Structure
Enumération Enumération
PROTOCOLE
Base de connaissances
Extension de Protocoles
PROTOCOLE :: BASE DE CONNAISSANCES
public protocol Monde {
func vivants() -> [Personne]
func recherche(nom:String) -> Personne?
}
PROTOCOLE :: MISE EN OEUVRE
extension Monde {
func recherche(nom:String) -> Personne? {
return vivants().filter{ p in p.nom == nom }.first
}
}
Assimilable au "default" des interfaces dans Java 8
Idem pour les classes, structures et enumérations
PROTOCOLE :: GÉNÉRICITÉ
protocol Copiable {
associatedtype E
func copier<C:Copiable where C.E == E>() -> C // 0_o
}
Spéci cation de Type Membre ≢ Paramétrisation
Spécialisation par le typealias
CLASSE
Etat interne
Base de connaissances
Héritage simple
Mise en oeuvre de Protocoles
CLASSE :: ETAT INTERNE & INITIALISATION
public class Personne {
private let nom:String
private var age:Int
public init(nom:String, age:Int) {
self.nom = nom
self.age = age
}
}
Pas de mot clé new
Personne(nom:"John Doe", age:42)
CLASSE :: INITIALISATION & OPTIONNEL
Initialisation pouvant retourner nil
public class Personne {
private let nom:String
private var age:Int
public init?(nom:String, age:Int) {
guard age > -1 else { return nil } // if age < 0 { return nil }
self.nom = nom
self.age = age
}
}
let personne:Personne? = Personne(nom:"John Doe", age:-1)
CLASSE :: BASE DE CONNAISSANCES
Méthode d'instance
(surchargeable)
Méthode statique
(non surchargeable)
Méthode de classe
(surchargeables)
class Personne {
⊞ ...
func aPourNom() -> String { return self.nom }
}
class Personne {
⊞ ...
static func new(nom:String) -> Personne {...}
}
class Personne {
⊞ ...
class func new(nom:String) -> Personne {...}
}
CLASSE :: REFERENCE TYPE
public class Personne {
private let nom:String
private var age:Int
⊞ public init(nom:String, age:Int) { ... }
}
let personne1 = Personne(nom:"John Doe", age:42)
let personne2 = personne1
personne1 et personne2 référencent la même donnée en mémoire
STRUCTURE
Etat interne
Base de connaissances
Mise en oeuvre de Protocoles
STRUCTURE :: INITIALISATION
public struct Personne {
let nom:String
var age:Int
}
Méthode init implicite. Redé nition possible.
Personne(nom:"John Doe", age:42)
STRUCTURE :: REFERENCE VALUE
var personne1 = Personne(nom:"John Doe", age:42)
let personne2 = personne1
personne1.age += 1
// personne1.age == 43
// personne2.age == 42
personne1 et personne2 ne référencent pas la même donnée en mémoire
ENUMÉRATION
Spéci cation de formes
Etat interne
Base de connaissances
Mise en oeuvre de Protocoles
ENUMÉRATION :: SPÉCIFICATION DE FORMES
public enum StadePersonne {
case Enfant, Adolescent, Adulte
}
let s : StadePersonne = ...
switch s {
case StadePersonne.Enfant: // ...
case StadePersonne.Adolescent: // ...
case StadePersonne.Adulte: // ...
}
Le switch/case doit être exhaustif / Véri é à la compilation
ENUMÉRATION :: SWITCH AVANCÉ
public enum PeutEtre<T> {
case QuelqueChose(value:T), Rien
public func get(_ valeurParDefaut:T) -> T {
switch self {
case .QuelqueChose(let v): return v
case _: return valeurParDefaut
}
}
}
Pattern Matching
self ou ... Self
self : Self
public class Personne {
private let nom:String
private var age:Int
⊞ public init(nom:String) { ... }
public func anniversaire() -> Self {
self.age += 1
return self
}
}
Le type Self dénote le type de l'objet courant à savoir ... self
DÉNOTATION DU TYPE COURANT
JAVA SWIFT
interface
Copiable<Self extends Copiable<Self>>
{
Self copie();
}
protocol Copiable {
func copie() -> Self
}
"F-Bounded quanti cation polymorphism"
SELF :: COPIABLE
class Personne : Copiable {
private let nom:String
private var age:Int
func copie() -> Self {
return type(of:self).init(nom:self.nom, age:self.age)
}
required init(nom:String, age:Int) {
self.nom = nom
self.age = 0
}
}
required force la dé nition dans les sous-classes
SELF :: INITIALISATION
class Personne {
private let nom:String
private var age:Int
required init(nom:String, age:Int) {
self.nom = nom
self.age = 0
}
class func new(nom:String) -> Self {
return self.init(nom:nom, age:0) // self ≡ Personne
}
}
Cela me rappelle furieusement le new de Perl !
UN TOUR D'HORIZON (TROP) RAPIDE !
Gestion des erreurs
Structure & Mutation
Notion de module
Swift & Android via le NDK (Swift ⇒C)
etc ...
PROSÉLYTISME !
Meetup !
Site o ciel
A curated list of awesome iOS ecosystem
MERCI

Mais conteúdo relacionado

Mais procurados

Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French CourseHaytam EL YOUSSFI
 
JDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne TourJDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne TourJosé Paumard
 
Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...ECAM Brussels Engineering School
 
Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage PythonAziz Darouichi
 
Programming language python 2021
Programming language python 2021Programming language python 2021
Programming language python 2021Dalila Chouaya
 
Techday Arrow Group: Java 8
Techday Arrow Group: Java 8Techday Arrow Group: Java 8
Techday Arrow Group: Java 8Arrow Group
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en PythonABDESSELAM ARROU
 
Introduction à scala
Introduction à scalaIntroduction à scala
Introduction à scalaSOAT
 
Claire epita-février2014
Claire epita-février2014Claire epita-février2014
Claire epita-février2014Yves Caseau
 

Mais procurados (20)

Python avancé : Tuple et objet
Python avancé : Tuple et objetPython avancé : Tuple et objet
Python avancé : Tuple et objet
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
JDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne TourJDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne Tour
 
Part1
Part1Part1
Part1
 
Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...
 
Université des langages scala
Université des langages   scalaUniversité des langages   scala
Université des langages scala
 
Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage Python
 
Ch04
Ch04Ch04
Ch04
 
Programming language python 2021
Programming language python 2021Programming language python 2021
Programming language python 2021
 
Initiation r
Initiation rInitiation r
Initiation r
 
Les listes en Python
Les listes en PythonLes listes en Python
Les listes en Python
 
C# 7 - Nouveautés
C# 7 - NouveautésC# 7 - Nouveautés
C# 7 - Nouveautés
 
Techday Arrow Group: Java 8
Techday Arrow Group: Java 8Techday Arrow Group: Java 8
Techday Arrow Group: Java 8
 
Corrige tp java
Corrige tp javaCorrige tp java
Corrige tp java
 
Theme 7
Theme 7Theme 7
Theme 7
 
Change mind about JS
Change mind about JSChange mind about JS
Change mind about JS
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
 
Introduction à scala
Introduction à scalaIntroduction à scala
Introduction à scala
 
Claire epita-février2014
Claire epita-février2014Claire epita-février2014
Claire epita-février2014
 
Clonage d'objets
Clonage d'objetsClonage d'objets
Clonage d'objets
 

Destaque

Android Bonnees pratiques
Android Bonnees pratiques Android Bonnees pratiques
Android Bonnees pratiques Patrick Bashizi
 
Design Pattern
Design PatternDesign Pattern
Design Patternnewegg
 
Design Pattern: Développement et Bonnes pratiques
Design Pattern: Développement et Bonnes pratiquesDesign Pattern: Développement et Bonnes pratiques
Design Pattern: Développement et Bonnes pratiquesAlex Wilfried OUATTARA
 
Design Pattern lecture 2
Design Pattern lecture 2Design Pattern lecture 2
Design Pattern lecture 2Julie Iskander
 
Swift, opportunités et perspectives du dernier langage d'Apple
Swift, opportunités et perspectives du dernier langage d'AppleSwift, opportunités et perspectives du dernier langage d'Apple
Swift, opportunités et perspectives du dernier langage d'AppleDamien GOSSET
 
Design patterns - Exemples en Java
Design patterns - Exemples en JavaDesign patterns - Exemples en Java
Design patterns - Exemples en JavaOussama BEN KHIROUN
 
Visitor Pattern
Visitor PatternVisitor Pattern
Visitor PatternIder Zheng
 
01 programmation mobile - android - (introduction)
01 programmation mobile - android - (introduction)01 programmation mobile - android - (introduction)
01 programmation mobile - android - (introduction)TECOS
 
Design Pattern introduction
Design Pattern introductionDesign Pattern introduction
Design Pattern introductionneuros
 
Chp6 - Développement iOS
Chp6 - Développement iOSChp6 - Développement iOS
Chp6 - Développement iOSLilia Sfaxi
 
Chp2 - Conception UX-UI des Applications Mobiles
Chp2 - Conception UX-UI des Applications MobilesChp2 - Conception UX-UI des Applications Mobiles
Chp2 - Conception UX-UI des Applications MobilesLilia Sfaxi
 
Chp5 - Applications Android
Chp5 - Applications AndroidChp5 - Applications Android
Chp5 - Applications AndroidLilia Sfaxi
 
Chp3 - Architecture Logicielle des Applications Mobiles
Chp3 - Architecture Logicielle des Applications MobilesChp3 - Architecture Logicielle des Applications Mobiles
Chp3 - Architecture Logicielle des Applications MobilesLilia Sfaxi
 
Chp1 - Introduction au Développement Mobile
Chp1 - Introduction au Développement MobileChp1 - Introduction au Développement Mobile
Chp1 - Introduction au Développement MobileLilia Sfaxi
 
Design Patterns (2003)
Design Patterns (2003)Design Patterns (2003)
Design Patterns (2003)Pascal Roques
 

Destaque (20)

Android Bonnees pratiques
Android Bonnees pratiques Android Bonnees pratiques
Android Bonnees pratiques
 
Sibtel&Swift
Sibtel&SwiftSibtel&Swift
Sibtel&Swift
 
Design Pattern
Design PatternDesign Pattern
Design Pattern
 
Cours1
Cours1Cours1
Cours1
 
Design Pattern: Développement et Bonnes pratiques
Design Pattern: Développement et Bonnes pratiquesDesign Pattern: Développement et Bonnes pratiques
Design Pattern: Développement et Bonnes pratiques
 
Design Pattern lecture 2
Design Pattern lecture 2Design Pattern lecture 2
Design Pattern lecture 2
 
Design pattern
Design patternDesign pattern
Design pattern
 
Swift, opportunités et perspectives du dernier langage d'Apple
Swift, opportunités et perspectives du dernier langage d'AppleSwift, opportunités et perspectives du dernier langage d'Apple
Swift, opportunités et perspectives du dernier langage d'Apple
 
Design patterns - Exemples en Java
Design patterns - Exemples en JavaDesign patterns - Exemples en Java
Design patterns - Exemples en Java
 
Visitor Pattern
Visitor PatternVisitor Pattern
Visitor Pattern
 
01 programmation mobile - android - (introduction)
01 programmation mobile - android - (introduction)01 programmation mobile - android - (introduction)
01 programmation mobile - android - (introduction)
 
Design Pattern introduction
Design Pattern introductionDesign Pattern introduction
Design Pattern introduction
 
Chp6 - Développement iOS
Chp6 - Développement iOSChp6 - Développement iOS
Chp6 - Développement iOS
 
Chp2 - Conception UX-UI des Applications Mobiles
Chp2 - Conception UX-UI des Applications MobilesChp2 - Conception UX-UI des Applications Mobiles
Chp2 - Conception UX-UI des Applications Mobiles
 
Chp5 - Applications Android
Chp5 - Applications AndroidChp5 - Applications Android
Chp5 - Applications Android
 
Chp3 - Architecture Logicielle des Applications Mobiles
Chp3 - Architecture Logicielle des Applications MobilesChp3 - Architecture Logicielle des Applications Mobiles
Chp3 - Architecture Logicielle des Applications Mobiles
 
Chp1 - Introduction au Développement Mobile
Chp1 - Introduction au Développement MobileChp1 - Introduction au Développement Mobile
Chp1 - Introduction au Développement Mobile
 
Design Patterns (2003)
Design Patterns (2003)Design Patterns (2003)
Design Patterns (2003)
 
Jcom02.ppt
Jcom02.pptJcom02.ppt
Jcom02.ppt
 
Mobile design
Mobile designMobile design
Mobile design
 

Semelhante a De java à swift en 2 temps trois mouvements

Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieurFredy Fadel
 
Future of java script web version
Future of java script web versionFuture of java script web version
Future of java script web versionSébastien Pertus
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniShellmates
 
Interface collectionsinter
Interface collectionsinterInterface collectionsinter
Interface collectionsinterRYMAA
 
Mix it 2011 - Clojure
Mix it 2011 - ClojureMix it 2011 - Clojure
Mix it 2011 - Clojurelolopetit
 
Programmation Android - 09 - Web services
Programmation Android - 09 - Web servicesProgrammation Android - 09 - Web services
Programmation Android - 09 - Web servicesYann Caron
 
Chap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdfChap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdframadanmahdi
 
Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5Mamadou Oury Ba
 
Partie1 TypeScript
Partie1 TypeScriptPartie1 TypeScript
Partie1 TypeScriptHabib Ayad
 
intro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPintro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPfrwebhelp
 
Algorithmique programmation2018
Algorithmique programmation2018Algorithmique programmation2018
Algorithmique programmation2018salah fenni
 
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Normandy JUG
 
Développement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdfDéveloppement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdfYasushiTsubakik
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptxLamissGhoul1
 
SdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoireSdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoireAlexandru Radovici
 
Introduction Clojure - Geneva JUG - Octobre 2012
Introduction Clojure - Geneva JUG - Octobre 2012Introduction Clojure - Geneva JUG - Octobre 2012
Introduction Clojure - Geneva JUG - Octobre 2012Pablo Tamarit
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Dr Samir A. ROUABHI
 

Semelhante a De java à swift en 2 temps trois mouvements (20)

Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 
Future of java script web version
Future of java script web versionFuture of java script web version
Future of java script web version
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
 
Interface collectionsinter
Interface collectionsinterInterface collectionsinter
Interface collectionsinter
 
Mix it 2011 - Clojure
Mix it 2011 - ClojureMix it 2011 - Clojure
Mix it 2011 - Clojure
 
Hibernate
HibernateHibernate
Hibernate
 
COURS_PYTHON_22.ppt
COURS_PYTHON_22.pptCOURS_PYTHON_22.ppt
COURS_PYTHON_22.ppt
 
Programmation Android - 09 - Web services
Programmation Android - 09 - Web servicesProgrammation Android - 09 - Web services
Programmation Android - 09 - Web services
 
Chap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdfChap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdf
 
Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
 
Partie1 TypeScript
Partie1 TypeScriptPartie1 TypeScript
Partie1 TypeScript
 
intro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPintro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APP
 
Algorithmique programmation2018
Algorithmique programmation2018Algorithmique programmation2018
Algorithmique programmation2018
 
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
 
Développement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdfDéveloppement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdf
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptx
 
SdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoireSdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoire
 
Introduction Clojure - Geneva JUG - Octobre 2012
Introduction Clojure - Geneva JUG - Octobre 2012Introduction Clojure - Geneva JUG - Octobre 2012
Introduction Clojure - Geneva JUG - Octobre 2012
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)
 

De java à swift en 2 temps trois mouvements