Swift vs Objective-C: la tendance émergente vs le dinosaure

Une brève histoire de Swift

Je me souviens à quel point c'était crucial lorsque Swift a été présenté à la WWDC (Worldwide Developers Conference) d'Apple en 2014. C'était le discours de la ville et tous les développeurs avec lesquels j'ai travaillé étaient impatients de l'essayer. La communauté iOS bourdonnait et il y avait beaucoup d'enthousiasme autour de la nouvelle langue.

Il a été développé afin de poursuivre certains concepts que nous avons vus en Objective-C tels que la programmation extensible. Mais il a poussé vers une approche différente du codage avec la conception orientée protocole et une sécurité accrue avec le typage statique.

Il a été un énorme succès et a vu sa croissance exploser dans les années qui ont suivi son introduction. C'était le langage de programmation le plus aimé en 2015, le deuxième langage le plus apprécié en 2016, le 11e langage de programmation le plus populaire en 2017, devançant Objective-C, et il a également battu Objective-C en 2018.

Swift est également un pari d'Apple pour convaincre les novices de devenir développeurs iOS. L'espoir est que les nouveaux développeurs apprendront la langue et l'utiliseront pour créer des applications iOS. Cela augmente alors l'écosystème de l'App Store. Étant donné que Swift est optimisé pour fonctionner avec les applications iOS, cela garantit que les applications en cours d'écriture sont de haute qualité.

La popularité des Swifts ne fait qu'augmenter, en particulier pour les petites applications et les start-ups. L'écart entre Swift et Objective-C ne fera que se creuser. L'avenir est radieux pour cette jeune langue.

Une brève histoire d'Objective-C

Objective-C est un langage de programmation orienté objet qui est un sur-ensemble de C, comme le nom du langage pourrait le révéler. Cela signifie que tout programme C valide compilera avec un compilateur Objective-C. Il dérive toute sa syntaxe non orientée objet de C et sa syntaxe orientée objet de SmallTalk. Il a été développé en 1984, il a donc eu le temps de mûrir en tant que langue et est beaucoup plus stable que Swift.

La plupart des gens connaissent Objective-C comme le langage utilisé pour développer des applications pour l'iPhone, mais l'histoire va beaucoup plus loin que cela. Je vous recommande de lire cet article pour un examen plus approfondi.

Les atouts de Swift

Swift a énormément gagné en popularité pour plusieurs raisons clés. Tout d'abord, il existe de nombreux outils de développement formidables fournis par Apple pour fonctionner en conjonction avec Swift. L'un de mes favoris personnels est le Playground, qui n'est compatible qu'avec Swift. Apple a lancé Playgrounds en 2016. Ils ont été présentés comme un moyen d'apprendre à coder, mais je les ai aimés pour une raison différente.

Le développement mobile a toujours eu plus d'obstacles que le développement Web. Vous avez besoin d'un simulateur, vous avez généralement besoin d'un environnement de développement intégré (IDE) propriétaire, et vous devez mettre en place un projet entier juste pour tester un petit prototype. Dans le cas d'Apple, vous avez également besoin d'un compte développeur. La bonne chose à propos de Playgrounds est que vous contournez une partie de cela. Vous avez besoin de Xcode ou de l'application Playgrounds, mais c'est tout. Et vous pouvez commencer à coder et à compiler votre code tout de suite.

Pourtant, un autre énorme avantage de Swift est le fait qu'il est open source. Si vous vous êtes déjà demandé comment un langage de programmation fonctionnait sous le capot, alors vous pouvez aller voir par vous-même! C'est un excellent moyen de comprendre le langage de programmation avec lequel vous travaillez quotidiennement à un niveau plus profond.

Une mention honorable va à un utilitaire intéressant uniquement disponible pour Swift, le gestionnaire de paquets Swift. Le Swift Package Manager est simplement un gestionnaire de dépendances intégré au système de build Swift. Cela ne change en aucun cas la donne, puisque CocoaPods et Carthage faisaient ce travail il y a longtemps, mais c'est une autre solution disponible si nécessaire.

De nombreuses preuves soutiennent le fait qu'Apple fait beaucoup pour rendre Swift plus souhaitable en tant que langage de programmation de choix pour les développeurs iOS. Ils créent de bons utilitaires et auxiliaires pour inciter les gens à commencer à utiliser le langage. Cela montre qu'Apple fait pression pour Swift avec force.

Caractéristiques linguistiques

Entrons dans certains détails de la langue elle-même. Swift est plus sûr en raison de son typage statique et de l'utilisation d'options. Dans Swift, si votre code nécessite une chaîne, les fonctionnalités de Swift garantiront que votre code obtiendra une chaîne et non un autre type, tel qu'un int. Cela dépend bien sûr si vous utilisez le langage tel qu'il est prévu et que vous ne forcez pas à tout déballer.

Une autre fonctionnalité intéressante de Swift est sa syntaxe. Surtout par rapport à Objective-C. Le meilleur mot pour décrire la syntaxe serait «succinct». Il n'y a pas besoin de points-virgules, d'appels à self ou de parenthèses autour des instructions if. Vous avez l'impression de sauter beaucoup de choses dont vous n'avez pas vraiment besoin de toute façon. Cela peut améliorer le processus de saisie de beaucoup de code.

Certaines personnes disent que cela conduit à des améliorations de la vitesse de développement, mais je ne dirais pas exactement cela moi-même. Le besoin continu de déballer les objets pour se conformer à la sécurité de type Swift compense les gains de développement qui viennent avec la concision.

Swift propose également de nombreuses options de flux de contrôle avec des instructions de commutation de garde, if-let, avancées, de répétition en cours et de report. J'aime toutes les différentes options car cela permet aux gens de contrôler le flux de leur code d'une manière qui leur convient. Beaucoup de gens détestent le report mais aiment les gardes et vice versa. Peu importe ce que vous aimez ou ce que vous n'aimez pas, mais les options sont là et vous pouvez coder de la manière qui vous convient le mieux.

Je ne peux pas oublier toutes les fonctionnalités de programmation fonctionnelles telles que filtrer, mapper et réduire. Ceci est idéal pour gérer les collections et est souvent utile.

Les faiblesses

Swift est une langue jeune, et avec cela, vient un certain changement. Les migrations entre les versions sont tout simplement pénibles. Dans une petite entreprise, l'outil de migration fourni par Apple peut être utile et couvrir la plupart des cas. Plus vous avez de code, cela devient moins utile. C'est encore pire si votre base de code contient à la fois du code Objective-C et Swift qui interagissent.

Dans ma dernière entreprise, l'effort de migration a pris un week-end entier à un groupe dédié. Ils devaient le faire le week-end pour ne pas rencontrer de conflits de fusion avec d'autres développeurs poussant du code. Cela a été incroyablement douloureux pour toutes les personnes impliquées.

L'une des raisons de ces migrations est le fait que Swift n'est pas ABI stable. Cela signifie que les nouvelles versions de Swift ne peuvent pas fonctionner avec les anciennes versions de Swift. Cela signifie également que la langue ne peut pas être empaquetée avec le système d'exploitation. C'est un gros problème pour les entreprises dotées de grandes applications qui combattent activement la taille des applications, car Swift est intégré à l'application et augmente la taille.

Un autre problème est que Swift ne joue pas bien avec Xcode. Xcode semble très saccadé lorsque vous travaillez avec Swift et la saisie semi-automatique ne fonctionne tout simplement pas parfois. C'est étrange étant donné à quel point Apple pousse Swift. On pourrait penser qu'ils voudraient faire de l'expérience d'utilisation de Swift avec Xcode un délice.

Swift a également des problèmes avec la gestion des chaînes, voir l'exemple de code ci-dessus. C'est maladroit comme l'enfer. Dans votre quotidien, ce n'est pas trop mal. Là où cela entre le plus en jeu, c'est lors des entretiens. Malheureusement pour les développeurs de Swift, les intervieweurs adorent poser des questions impliquant la manipulation de chaînes. Ceci est aggravé par le fait que la façon dont les chaînes sont gérées a changé entre les versions de Swift.

Les atouts d'Objective-C

Objective-C est un langage orienté objet très dynamique. Il est dynamique au point que vous pouvez échanger les appels de méthode au moment de l'exécution en utilisant des techniques telles que Swizzling. Il est capable de faire ce genre de choses grâce à son paradigme d'envoi de messages. Cela permet aux objets d'envoyer des messages à d'autres objets au moment de l'exécution pour déterminer l'appel de la méthode appelée.

Concrètement, qu'est-ce que cela signifie? Eh bien, un gros avantage est l'adaptabilité à l'exécution. Cela signifie accéder à des API privées ou faire des choses comme des objets moqueurs au moment de l'exécution deviennent possibles. Cela peut être particulièrement utile pour les tests unitaires. Les bibliothèques comme OCMock rendent cela encore plus facile et permettent des configurations de test très élaborées. Avoir de bons tests unitaires rendra votre application plus stable et plus fiable.

En parlant de stabilité, Objective-C existe depuis longtemps, ce qui en fait un langage très stable. Avec Swift, vous rencontrerez des bogues assez surprenants et qui perturberaient la stabilité de votre application. Dans l'exemple que j'ai lié ci-dessus, ce plantage serait causé par la langue réelle que vous utilisez pour coder votre application, et non par une erreur créée par le code que vous avez écrit. Cela peut être frustrant.

Le dernier point, plus important pour certaines entreprises, est la compatibilité avec les bibliothèques C et C ++. Étant donné que Objective-C est un sur-ensemble de C, il est facile d'utiliser du code C et C ++ avec Objective-C. Vous pouvez même utiliser Objective-C ++ si vous en avez envie. Ceci est important si vous dépendez de bibliothèques C et C ++ tierces.

Les faiblesses

La première plainte principale que j'entends à propos d'Objective-C est la syntaxe. J'ai commencé ma carrière professionnelle en utilisant Objective-C donc je n'ai aucun problème avec cela. Il est verbeux et un peu non conventionnel avec l'utilisation de crochets. Mais les opinions sur la syntaxe ne sont que cela, des opinions. J'ai pensé que j'énumérerais ce point car c'est l'une des premières choses qui surviennent lorsque vous mentionnez Objective-C.

Une chose avec laquelle je suis d'accord, c'est que la syntaxe des blocs est frustrante. Il existe même un site Web dédié au décodage des mystères des blocs en Objective-C. J'utilise en fait ce site Web assez souvent comme référence.

Le plus gros problème auquel Objective-C est actuellement confronté est le fait qu'un jour, Apple pourrait abandonner la prise en charge d'Objective-C avec Cocoa et d'autres bibliothèques courantes utilisées pour créer des applications iOS. Étant donné que Objective-C est principalement utilisé pour créer des applications iOS, ce serait un glas pour le langage. Cela signifie également que les nouveaux arrivants dans la communauté iOS ont peur de s'engager à apprendre Objective-C dès maintenant, car il ne sera peut-être plus utilisé à l'avenir.

Revenons à la langue elle-même. Il est susceptible d'avoir des problèmes de débogage difficiles en raison de la nature dynamique du langage. La possibilité d'envoyer des messages à zéro et de ne pas planter en plus du manque de typage strict sont quelques exemples de choses qui conduisent à ces problèmes difficiles à déboguer.

Objective-C ne vous tient pas non plus la main quand il s'agit de ces choses. Bien qu'il soit bien que l'application ne plante pas lorsque vous envoyez un message à zéro, cela peut mettre votre application dans un état étrange. Il est très difficile de déboguer de tels problèmes. Le fait que Swift ait un typage strict et l'utilisation d'options de déballage empêche ces choses au moment de la compilation.

Dois-je apprendre Swift ou Objective-C?

La réponse pour la plupart des gens sera Swift. Apple fait clairement de Swift la langue de choix pour sa communauté de développement d'applications iOS. Swift continuera à devenir plus performant à mesure que la stabilité ABI sera introduite et que Swift sera intégré au système d'exploitation lui-même.

Si vous cherchez un emploi en tant que développeur iOS, Swift sera la langue que vous souhaitez apprendre. La plupart des startups et des entreprises de niveau intermédiaire verront leurs applications iOS entièrement écrites en Swift. Cela signifie que vous pourrez postuler et interviewer pour plus d'emplois si vous apprenez Swift.

Même dans les grandes entreprises où l'Objectif-C est encore largement utilisé, les entretiens peuvent toujours être réalisés en Swift. Ainsi, vous pouvez apprendre Objective-C une fois que vous avez rejoint l'entreprise et ne pas vous soucier de vous surcharger de plus de choses à apprendre avant l'entrevue.

Vous voudrez apprendre Objective-C si vous travaillez déjà dans une entreprise en démarrage ou de niveau intermédiaire et que vous souhaitez passer à une entreprise plus grande. Les compétences avec Objective-C vous donneront des connaissances spécialisées et un avantage sur les autres candidats à l'entrevue.

Vous avez aimé ce que vous avez lu? Jetez un œil à certains de mes autres articles:

Conseils pour votre premier entretien technique.

Commencer une carrière technologique à partir de rien.

Devriez-vous obtenir un diplôme en informatique?