cv

Découverte codo-linguistique - Swift™ 4.

En janvier 2019, je suis parti à la découverte d'un langage nouveau pour moi, Swift™ 4.
Voici ce que j'ai à dire.

Commençons par ce qui peut coincer. Je me suis cogné l'intégralité du manuel The Swift™ Programming Language (Swift™ 4.2) et j'ai eu la désagréable surprise de tomber sur le passage suivant à la toute dernière page.

> ### Copyright and Notices > > Apple Inc. > Copyright © 2018 Apple Inc. > All rights reserved. > > No part of this publication may be , stored in a retrieval system, or transmitted, in any form or by any means, mechanical, electronic, photocopying, recording, or otherwise, without prior written permission of Apple Inc., with the following exceptions: Any person is hereby authorized to store documentation on a single computer or device for personal use only and to print copies of documentation for personal use provided that the documentation contains Apple’s copyright notice. > > No licenses, express or implied, are granted with respect to any of the technology described in this document. Apple retains all intellectual property rights associated with the technology described in this document. This document is intended to assist application developers to develop applications only for Apple-branded products. > > [...]

Extrait de: Apple Inc. « The Swift Programming Language (Swift 4.2). » Apple Books™.

Problème récursif 1 :
> La présente licence est elle protégée par elle même. Si oui cela pose un problème dès à présent car cet article est hors-la loi.
Problème de compétence juridique 2 : > Apple peut-il, en france, s'opposer au droit de citation ? Moins de 10% de l'ouvrage original et moins de 10% du présent article terminé. Problème 3 :
> Swift™ ne sert à rien hors d'Apple. C'est donc que leur logique d'enfermement commence dès les développeurs qui souhaitent éditer leur logiciels sur mac.

I fought the law and the law won.

Sonny Curtis - 1958

Tout cela donne peut-être le sentiment que je fais cet article pour dire du mal d'Apple. Moi qui ait si longtemps été qualifié de piquousé au jus de pomme... Pourtant le but initial de cet article est tout autre.
J'ai trouvé plein de choses malines dans Swift™. Je comprends profondément qu'ils aient voulu faire un langage sécurisant pour le développeur. Un langage réduisant le risque de "mauvaises expériences utilisateurs" lié à un mauvais typage de variable ou à une mauvaise gestion de la mémoire.
Mais pourquoi vouloir que cela ne profite qu'à une cible particulière ? Celle de ceux capable de débourser plus de 1000€ pour un téléphone...

Revenons à nos liliputiens cher Gulliver.

Mon premier point sera donc de louer ce très bon ouvrage d'introduction, apprentissage et référence qu'est The Swift™ Programming Language (Swift™ 4.2) . Il cumule une très bonne découverte du langage et de ses concepts dans sa première partie et un bon guide de référence pour ceux qui savent ce qu'ils cherchent dans la seconde. Trop souvent, soit les deux sont imbriqués rendant difficile la recherche d'info (cf. doc Python ou doc Symfony ) soit on a que l'aspect référence (cf. doc c ).
Il est très plaisant de parcourir ce livre tutoriel agrémenté d'exemples concrets.
Et point favorable qu'on ne peut lui enlever son format livre numérique le rend pratique pour travailler dans le train ou dans une campagne où votre téléphone (à 1000€ ou moins) ne capte qu'une 2G à 5ko/s.

Le guided tour qui ouvre le livre, qui peut être lu et codé directement dans un fichier .playground sur Xcode™ est une excellente idée et une bonne manière de faire un premier tour du propriétaire pour les développeurs ayant déjà un ou deux langages derrière eux.

Du point de vue du code.

Rien que de très classique, pas de paradigme étrange où non croisé auparavant. J'ai trouvé la syntaxe des getters et setters hyper maline. Dans le cadre de la lecture du code c'est une bonne idée d'avoir les getters et les setters proches de la déclaration de l'attribut.

var perimeter: Double {
    get {
        return 3.0 * sideLength
    }
    set {
        sideLength = newValue / 3.0
    }
}

Extrait de: Apple Inc. « The Swift Programming Language (Swift 4.2). » Apple Books.

À contrario, certaines syntaxes sont ideuses :

let greeting = "Guten Tag!"
greeting[greeting.startIndex]
// G
greeting[greeting.index(before: greeting.endIndex)]
// !
greeting[greeting.index(after: greeting.startIndex)]
// u
let index = greeting.index(greeting.startIndex, offsetBy: 7)
greeting[index]
// a

Extrait de: Apple Inc. « The Swift Programming Language (Swift 4.2). » Apple Books.

Quand on a été élevé à coup de Python où la manipulation de tableau est le chose la plus agréable du monde c'est violent. On est d'accord que par rapport à la manipulation de chaines en c ça va. Mais qui a l'envie de comparer les actes de sa vie quotidienne au fait de s'insérer des alumettes sous les ongles jusqu'à la matrice ?

Voici l'équivalent en Python.

greetings = "Guten Tag!"
greetings[0]
# 'G'
greetings[-1]
# '!'
greetings[1]
# 'u'
greetings[7]
# 'a'

Globalement allez jeter un oeil au moins au quick tour. Il y en a pour moins d'une heure si vous avez déjà un peu codé dans votre vie et ça donne assez bien la saveur du langage.

Mais en pratique ?

Hé bien, en pratique j'étais parti sur l'idée de me faire une extension Quicklook™ pour affcher l'aperçu de fichiers alors non gérés par mon ordinateur. Ma mauvaise surprise en cette fin de mois fût de constater que les plugins Quicklook™ étaient en C. Ce projet sera donc réalisé lors de mon approfondissement de ce langage en octobre prochain. En attendant pas de projet réalisé à ce jour en Swift™. Si jamais je vennais à en faire un, je ferrai un article dédié.

Avant de nous dire au revoir et de rentrer chez nous.

Les plus

a) Aller jetter un oeil ça vaut le coup.
b) Un peu comme des promesses, même si la syntaxe a l'air pas évidente à maîtriser.

Les moins

Constats neutres

"Que chacun choisisse le genre d'étude qui convient le plus à son talent."

Jonathan Swift - Les voyages de Gulliver (1726)

Je retire de cette exploration des syntaxes découvertes à travers Swift™ qui peut-être seront recroisées dans d'autres langages. La frustration de ne pas avoir pu/eu le temps vraiment jouer avec la toolchain de compile. Il me reste énormément de choses à apprendre pour transformer cette première rencontre en faire quelquechose d'exploitable. Notment l'API Cocoa™, car ce qui est certain, c'est qu'à ce jour pour faire des tâches de types scripts en commande line je vais rester sur du Python. Et pour des apps portables d'un environement à un autre je resterai soit sur du Python soit sur de l'electron .

Tous les noms marqués par ™ sont des marques commerciales appartenant à Apple Inc.

Grégoire Cutzach™