diff --git a/fr-fr/swift-fr.html.markdown b/fr-fr/swift-fr.html.markdown new file mode 100644 index 00000000..18628524 --- /dev/null +++ b/fr-fr/swift-fr.html.markdown @@ -0,0 +1,225 @@ +--- +language: swift +contributors: + - ["Grant Timmerman", "http://github.com/grant"] +translators: + - ["@prrrnd", "https://github.com/prrrnd"] +lang: fr-fr +--- + +Swift est un langage de programmation crée par Apple pour iOS et OS X. Swift a été introduit en 2014 à la conférence WWDC d'Apple. Il est construit avec le compilateur LLVM inclus dans la version bétâ de Xcode 6. + +Pour plus d'informations, en anglais, regardez le [guide d'Apple](https://developer.apple.com/library/prerelease/ios/referencelibrary/GettingStarted/LandingPage/index.html), qui inclus un tutoriel complet sur Swift. + +```js +// +// Bases +// + +println("Hello, world") +var myVariable = 42 +let myConstant = 3.1415926 +let explicitDouble: Double = 70 +let label = "du texte " + String(myVariable) // Cast +let piText = "Pi = \(myConstant)" // Interpolation +var optionalString: String? = "optional" // Peut être nil +optionalString = nil + + +// +// Tableaux et dictionnaires +// + +// Tableau +var shoppingList = ["poisson", "eau", "citrons"] +shoppingList[1] = "bouteille d'eau" +let tableauVide = [String]() + +// Dictionnaire +var occupations = [ + "Malcolm": "Capitaine", + "kaylee": "Mécanicien" +] +occupations["Jayne"] = "Secretaire" +let dicoVide = Dictionary() + + +// +// Contrôle et boucles +// + +// Boucle for (tableau) +let monTableau = [1, 1, 2, 3, 5] +for value in monTableau { + if value == 1 { + println("Un!") + } else { + println("Pas un!") + } +} + +// Boucle for (dictionnaire) +for (key, value) in dict { + println("\(key): \(value)") +} + +// Boucle for (interval) +for i in -1...1 { // [-1, 0, 1] + println(i) +} +// utilisez ..< pour exclure le dernier élement + +// Boucle while +var i = 1 +while i < 1000 { + i *= 2 +} + +// Boucle do-while +do { + println("bonjour") +} while 1 == 2 + +// Switch +let legume = "haricot" +switch legume { +case "haricot": + // ... +case "concombre", "patate": + // ... +default: // requis afin de couvrir toutes les possibilités + // ... +} + + +// +// Fonctions +// + +// Les fonctions sont de type primitif, ce qui veut dire qu'elles peuvent être incluses dans d'autres fonctions + +// Fonction +func direBonjour(name: String, day: String) -> String { + return "Bonjour \(name), on est \(day) aujourd'hui." +} +direBonjour("Bob", "mardi") + +// Fonction qui retourne plusieurs valeurs dans un tuple +func getPrix() -> (Double, Double, Double) { + return (3.59, 3.69, 3.79) +} + +// Arguments +func setup(nombres: Int...) {} + +// Passer et retourner des fonctions +func augmenter() -> (Int -> Int) { + func ajouterUn(nombre: Int) -> Int { + return 1 + nombre + } + return ajouterUn +} +var increment = augmenter() +increment(7) + + +// +// Closures +// +var nombres = [1, 2, 6] + +// Les fonctions sont des cas de closures spéciales ({}) + +// Exemple de closure. +// `->` sépare les arguments et le type de retour +// `in` sépare l'en-tête de closure de son corps +nombres.map({ + (nombre: Int) -> Int in + let resultat = 3 * nombre + return resultat + }) + +// Lorsque le type est connu, comme ci-dessus, on peut faire ceci +nombres = nombres.map({ nombre in 3 * nombre }) +//Ou cela +//nombres = nombres.map({ $0 * 3 }) + +print(nombres) // [3, 6, 18] + + +// +// Classes +// + +// Toutes les méthodes et propriétés d'une classe sont publiques. +// Si vous avez juste besoin de stocker des données dans un +// objet structuré, vous devez utiliser une structure + +// Une classe `Square` hérite d'une classe `Shape` +class Rect: Shape { + var longueurCote: Int = 1 + + // Custom getter and setter property + var perimeter: Int { + get { + return 4 * longueurCote + } + set { + longueurCote = newValue / 4 + } + } + + init(longueurCote: Int) { + super.init() + self.longueurCote = longueurCote + } + + func shrink() { + if longueurCote > 0 { + --longueurCote + } + } + + override func getArea() -> Int { + return longueurCote * longueurCote + } +} +var monCarre = new Square(longueurCote: 5) +print(monCarre.getArea()) // 25 +monCarre.shrink() +print(monCarre.longueurCote) // 4 + +// If you don't need a custom getter and setter, +// but still want to run code before and after getting or setting +// a property, you can use `willSet` and `didSet` + + +// +// Enumerations +// + +// Les énumerations peuvent être d'un type spécifique ou non. +// Elles peuvent contenir méthodes et classes + +enum Suit { + case Pic, Coeur, Carre, Trefle + func getIcon() -> String { + switch self { + case .Pic: return "♤" + case .Coeur: return "♡" + case .Carre: return "♢" + case .Trefle: return "♧" + } + } +} + + +// +// Autres +// + +// `protocol`: Similaire aux interfaces en Java +// `extension`s: Permet d'ajouter des fonctionnalités à un type existant +// Generics: Similaire à Java. Utilisez le mot clé `where` pour specifier les pré-requis du generic + +```