IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Quels sont les meilleurs langages de programmation pour développer une application mobile ?
Petit tour d'horizon sur les plus populaires

Le , par Stéphane le calme

329PARTAGES

12  1 
Le choix du meilleur langage de programmation pour les applications mobiles peut être déroutant, surtout si vous manquez d'informations liées au monde de la programmation mobile. Certains ont de nombreuses préoccupations liées au développement d'applications. Peut-être disposent-ils d'une plateforme Web et se demandent comment faire d'un site Web une application ou quel langage utiliser pour développer une application.

Le choix du meilleur langage pour le développement d'applications dépend en grande partie du système d'exploitation avec lequel vous allez travailler. Le fait est que différents systèmes d'exploitation prennent en charge différents langages de programmation mobiles. Par exemple, lorsque Swift et Objective C sont utilisés pour les applications iOS, Kotlin et Java sont utilisés pour le système d'exploitation Android. En revanche, React Native est idéal pour les deux. Et si nous passions en revue les langages de programmation parmi les plus populaires chez les développeurs d'applications mobiles qui les considèrent probablement comme étant efficaces ?

Objective-C

Objective-C est un langage de programmation orienté objet réflexif. C'est une extension du C ANSI, comme le C++, mais qui se distingue de ce dernier par sa distribution dynamique des messages, son typage faible ou fort, son typage dynamique et son chargement dynamique. Contrairement au C++, il ne permet pas l'héritage multiple mais il existe toutefois des moyens de combiner les avantages de C++ et d'Objective-C.

Objective-C permet la création rapide d'objet NSString grâce au "@", de la même manière que le C avec les chaînes de caractères "". Les NSString sont encodés en unicode, c'est-à-dire que, contrairement au C, les caractères ne sont pas limités aux codes ASCII. Nous pouvons donc fixer la valeur de la variable surname d'une instance de Personne de cette façon :

Code Objective-C : Sélectionner tout
1
2
3
4
// On crée un pointeur vers un objet de la classe Personne, qu'on a d'abord alloué dans l'espace mémoire, et initialisé. 
Personne *exemple = [[Personne alloc] init]; 
//On envoie un message au pointeur exemple qui va le rediriger vers l'objet vers lequel il pointe, pour fixer la valeur de la clef surname. 
[exemple setValue:@"Paul" forKey:@"prenom"];

En Objective-C, tout appel de méthode d'une classe est un passage de message. Pour appeler un message sur un objet, on place entre crochet l'objet puis le message. On peut chaîner les appels très facilement. Ainsi dans l'exemple, methode renvoie un objet et sur cet objet on appelle methode2.

Code Objective-C : Sélectionner tout
1
2
3
4
// passage de message 
[objet methode:argument]; 
// chaînage de message 
[[objet methode:argument] methode2:argument2];

Objective-C est un surensemble du langage de programmation C. Il fournit des performances orientées objet et un runtime actif. Objective-C acquiert la syntaxe, les instructions de contrôle de flux et les types primitifs du langage C. Pourtant, il ajoute une syntaxe pour définir les classes et les méthodes. Objective-C ajoute également une prise en charge au niveau du langage.

Malgré les avantages proposés par ce langage, actuellement, Swift a dépassé Objective-C en popularité et en utilité.

Swift

Objective-C est apparu pour la première fois en 1984 à l'époque de NeXT. Le langage s'est basé sur la pile du langage C et était à l'origine utilisé pour créer des applications pour macOS (qui s'appelait alors NeXTSTEP).

Plus tard en 2011, lorsque le premier iPhone est apparu, Objective-C était le seul choix si vous vouliez développer une application ou un jeu pour iOS. Le problème avec Objective-C est qu'avec le temps, il est devenu assez ancien et pas si simple pour les nouveaux développeurs, par rapport à Kotlin, que les développeurs Android aimaient pour sa syntaxe concise et claire, car il est utilisé beaucoup plus facilement pour écrire des applications qu'avec Java.

De toute évidence, Apple ne voulait pas que tous les développeurs mobiles passent progressivement du développement pour iOS à Android simplement à cause d'une syntaxe obsolète illisible. C'est ainsi que l'éditeur a commencé à développer un tout nouveau langage de programmation appelé Swift ! Le 2 juin 2014, Apple a présenté Swift au monde entier, consacrant toute la conférence de la WWDC à ce nouveau langage.

Swift est un langage de programmation objet compilé, multi-paradigmes, ayant pour objectif d'être simple, hautes performances et sûr. Il est développé en open source. Le projet de développement de Swift est géré par Apple qui en est également le principal contributeur mais de nombreux membres de la communauté Swift ainsi que d'autres acteurs tels que Google et IBM participent activement à son développement. Swift est officiellement supporté sur les systèmes d'exploitation Linux Ubuntu, iOS, macOS, watchOS et tvOS. Un support non officiel (géré par la communauté) existe sur d'autres plateformes Linux telles que Debian et Fedora.

Swift dispose d'une interopérabilité avec le langage C ainsi qu'avec l'Objective-C sur les plateformes d'Apple. Le compilateur de Swift utilise LLVM pour la génération du code machine.

Syntaxe du langage :

Les variables et les constantes permettent de stocker des informations. Swift supporte entre autres les types Int, Double, Float, Char, String et Bool.

Swift infère le type de variable, c'est-à-dire qu'il n'est pas nécessaire de préciser le type d'une variable lors de sa création. Si besoin, il est possible de le préciser explicitement.

Code Swift : Sélectionner tout
1
2
3
var entierImplicite = 70 
var doubleImplicite = 70.0 
var floatExplicite: Float = 70 // On précise ici explicitement le type de la variable

Les constantes sont à utiliser pour toute valeur qui restera inchangée lors du programme.

Code Swift : Sélectionner tout
1
2
let pi = 3.14159 
let deuxPi = 2 * pi

Il existe plusieurs types de conditions en Swift, notamment if, switch et if let.

Code Swift : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
switch nombreDeCôtés 
{ 
    case 3: 
        print("Triangle") 
    case 4: 
        print("Quadrilatère") 
    case 5: 
        print("Pentagone") 
    case 6: 
        print("Hexagone") 
    default: 
        print("Nom indisponible pour votre figure") 
}

En Swift, pour des raisons de sureté, les conditions de type switch doivent être exhaustives, c'est-à-dire qu'il est nécessaire de gérer toutes les valeurs que peut prendre la variable concernée. Pour que le switch soit exhaustif il faut ou bien tester explicitement toutes les valeurs possibles de la variable (lorsque cela est possible, typiquement dans le cas des énumérations qui n'ont qu'un nombre réduit de valeurs possibles), ou bien en ajoutant default dont les instructions seront exécutées si aucun des case précédents ne correspondait à la valeur de la variable testée.

Il est également possible de tester plusieurs résultats à la fois :

Code Swift : Sélectionner tout
1
2
3
4
5
6
7
8
9
switch lettre 
{ 
    case "a","e","i","o","u","y": 
        print("Voyelle") 
    case "b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "z": 
        print("Consonne") 
    default: 
        print("Votre caractère n'est pas listé") 
}

Contrairement au langage C, il n'est pas nécessaire d'ajouter l'instruction break après chaque cas d'un switch : celle-ci est présente implicitement. Si l'on souhaite reproduire explicitement le comportement "fall trough" de C, on peut utiliser l'instruction falltrough.

Par ailleurs, le switch de Swift est une structure de contrôle de première classe et non pas l'équivalent d'un goto comme en C, ce qui signifie que chaque case dispose d'un contexte qui lui est propre.


Kotlin

Kotlin est un langage de programmation orienté objet et fonctionnel, avec un typage statique qui permet de compiler pour la machine virtuelle Java et JavaScript. Il est développé par une équipe de programmeurs chez JetBrains, l'éditeur d'IntelliJ IDEA, l'environnement de développement intégré pour Java et sur lequel est basé Android Studio, l’EDI officiel pour développer les applications Android.

Le support officiel de Kotlin pour le développement Android a été annoncé à la conférence Google I/O 2017. Pour l’équipe Android de Google, cette décision de supporter Kotlin s’expliquait aisément. D’abord le support EDI pour Kotlin : Android Studio est basé sur IntelliJ IDEA de JetBrains et l'équipe JetBrains travaille depuis des années pour s'assurer que Kotlin fonctionne parfaitement avec IntelliJ IDEA. Google héritera donc de tout leur travail pour supporter Kotlin dans Android Studio. Mais au-delà de cet aspect, Kotlin présente bien d’autres avantages. D’après Google, « Kotlin est [un langage] expressif, concis, extensible, puissant et agréable à lire et écrire », et « il a des fonctionnalités de sécurité intéressantes en termes de nullabilité et d'immutabilité » qui s'alignent avec ses investissements pour rendre les applications sûres et performantes par défaut.

Le plus important d’après Google, c’est que Kotlin est interopérable avec les langages officiels pour le développement Android (Java, C++) et le runtime Android. La firme a expliqué par exemple que Kotlin fonctionne avec le langage Java de manière transparente, de sorte qu'il est facile pour les développeurs qui aiment le langage Java de continuer à l'utiliser, mais aussi d'ajouter progressivement du code Kotlin et de tirer parti des bibliothèques Kotlin. En outre, l'adoption de Kotlin sur Android augmentait régulièrement au fil des années, et d’après Google, avec un enthousiasme croissant parmi les développeurs ; une des raisons pour lesquelles la société a voulu accueillir Kotlin en tant que langage officiel sur Android pour assurer à ces derniers un meilleur support de Kotlin. Ce qui a été fait à partir d'Android Studio 3.0.

Code Kotlin : Sélectionner tout
1
2
3
4
5
6
7
8
9
class Greeter(val name: String) { 
    fun greet() { 
        println("Hello, $name") 
    } 
} 
  
fun main(args: Array<String>) { 
    Greeter(args[0]).greet() 
}
Code Kotlin : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
fun main(args: Array<String>) { 
    cases("Hello") 
    cases(1) 
    cases(3) 
    cases(System.currentTimeMillis()) 
    cases(MyClass()) 
    cases("hello") 
} 
  
fun cases(obj: Any) { 
    when (obj) { 
        1 -> println("One") 
        in 2..4 -> println("Between two and four") 
        "Hello" -> println("Greeting") 
        is Long -> println("Long") 
        !is String -> println("Not a string") 
        else -> println("Unknown") 
    } 
} 
  
class MyClass() { 
}

Java

Java est un langage de programmation populaire notamment pour les développements sur le système d'exploitation Android. Il a été initialement créé par Sun Microsystems, mais appartient actuellement à Oracle. Développé longtemps après C et C++, Java combine de nombreuses fonctionnalités puissantes de ces langages tout en corrigeant certains de leurs inconvénients. Les fonctionnalités les plus importantes de Java sont:
  • Facile à apprendre et à comprendre
  • Conçu pour être indépendant de la plateforme et sécurisé grâce aux machines virtuelles
  • Il est orienté objet

Le système d'exploitation Android repose fortement sur les principes fondamentaux de Java. Le SDK Android intègre de nombreuses bibliothèques Java standard, notamment des bibliothèques de structure de données, des bibliothèques graphiques, des bibliothèques mathématiques, des bibliothèques de mise en réseau et tout ce que vous pouvez souhaiter. Les bibliothèques Android spéciales qui aident à développer de superbes applications Android sont également disponibles.

Voici un exemple d’un programme Hello world typique écrit en Java :

Code Java : Sélectionner tout
1
2
3
4
5
 public class HelloWorld { 
     public static void main(String[] args) { 
         System.out.println("Hello world!"); 
     } 
 }

React Native (JavaScript)

Si les langues mentionnées ci-dessus sont conçues pour créer des applications pour les systèmes d'exploitation iOS ou Android, React Native est l'un des framework utilisé pour le développement d'applications mobiles pour les deux systèmes d'exploitation. En clair, il est utilisé pour créer une application multiplateforme qui fonctionne sur différentes plateformes, au lieu de créer des applications distinctes pour chaque système.

Pour plusieurs, le code JavaScript, implémenté dans le framework React Native, est identifié comme l'une des solutions multiplateformes de prédilection pour créer des applications Android et iOS. Grâce à React Native, il est possible de travailler sur deux OS différents en utilisant une seule plateforme.

Le framework React Native est développé par Facebook. Il s'agit d'un framework open source qui permet de créer des applications mobiles natives à l'aide du langage de programmation JavaScript. En utilisant React Native, on peut développer des applications similaires à ce qu'elles font tout en utilisant Kotlin ou Java pour Android et Swift ou Objective-C pour iOS. Vous trouverez ci-dessous les principales fonctionnalités avantageuses de React Native!
  • Il offre des performances optimales. React Native est connecté aux composants natifs des deux systèmes d'exploitation et génère librement du code pour les API natives.
  • La réutilisabilité des codes est un autre avantage. Il est possible de réutiliser des codes et des composants pré-développés, les développeurs n'ont donc pas besoin d'utiliser des codes indépendants pour les deux systèmes d'exploitation.
  • React Native est accessible à une large communauté de développeurs. Comme il s'agit d'un langage open source, il est facile de contribuer à l'évolution du framework et également de tirer pleinement parti de la technologie


Et vous ?

Développez-vous des applications mobile ? Sur quelle plateforme ?
Quel serait le langage de programmation que vous proposeriez pour un développement d'application mobile ?
Êtes-vous plus porté vers le développement d'applications mobiles ou le développement d'applications web ? Pourquoi ?

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de micka132
Expert confirmé https://www.developpez.com
Le 23/01/2020 à 12:24
Une application mobile ca peut être également un jeu, et du coup tous les langages cités ne sont pas les plus pertinents.
C# permet à la fois grâce à Unity de faire du jeu, et pour de l'appli "gestion" avec Xamarin de faire de l'IOS et d' l'Android.
12  2 
Avatar de grunk
Modérateur https://www.developpez.com
Le 23/01/2020 à 16:20
Une fois de plus il n'ya pas de "meilleur" langage. Il y'a des situations auxquels on répond avec l'outil le plus adapté pour être le plus efficace.

Une application simple , multi plateforme ? Du js avec React ou du C# avec xamarin sont surement les plus rentable.
Des calculs importants et des besoins de perf ? On ira surement vers un mix de C++ et du langage natif du système.
9  0 
Avatar de gbegreg
Membre expert https://www.developpez.com
Le 24/01/2020 à 12:53
Citation Envoyé par L33tige Voir le message
Bah si ton appli multiplateforme est aussi sur pc est est au final une webapp...
Bah non et pour diverses raisons : perfs, ergonomie, faisabilité...

Par exemple, pour un client dont les employés partaient pour la journée sur des chantiers (travaux ou études) avec un appareil photo numérique, ordi portable et GPS,j'ai fait une appli (IOS à l'origine) qui permettait de remplacer les 3 appareils par des iPad. La société a par la suite changer sa flotte de tablettes par des tablettes Android. C'était dans une région montagneuse donc mal couverte par le réseau 4G. Il fallait aussi que la tablette tienne toute la journée malgré une utilisation assez poussée. La synchronisation des informations recueillies par les utilisateurs devait se faire automatiquement ensuite dès qu'une connexion réseau était possible. Une application web n'aurait pas pu répondre à cela.

De manière générale, les applications Web n'ont pas tué les applis : il n'y a qu'à voir le succès des différents stores, les frameworks de dev Web se mettent aussi au natif (je trouve cela aberrant : cela produit des applications lourdes, gourmandes, souvent peu performantes, il faut toute une pile d'outils pour parvenir à quelque chose) et je ne parle pas des différences de comportement qui existent encore entre navigateurs dans le cas des applis web...
8  0 
Avatar de gbegreg
Membre expert https://www.developpez.com
Le 28/01/2020 à 20:06
Citation Envoyé par L33tige Voir le message
Tu m'explique comment tu compile ton logiciel pour en faire un site web ?
Je n'ai jamais dit que je "compilais mon logiciel pour en faire un site web"... et le sujet de la discussion concerne le développement d'applications mobiles. J'ai juste expliqué pourquoi je préfère développer en natif (mais en cross plateforme) plutôt que transformer une webapp en appli.

Citation Envoyé par L33tige Voir le message
oui enfin s'agit de pas être totalement abruti aussi et de pas faire n’importe-quoi je pourrais dire la même chose d'une app spring par exemple.
Je suis d'accord mais une simple petite appli en React JS basée sur create-react-app c'est déjà plus de 1200 modules Node et plus de 130 Mo...

Citation Envoyé par L33tige Voir le message
C'est, encore une fois je me répète, tout l’intérêt des apps hybrides, la compatibilité est gérée automatiquement, j'ai jamais eu besoin de faire du spécifique...
Oui, je me répète, au détriment des performances et des développeurs qui ne savent pas trop ce qui se passe sous le capot. Ce qui peut être problématique dans certains cas. De plus, pour moi, le natif n'est pas du spécifique. Je vais me répéter à nouveau c'est du cross plateforme : oui on peut faire du spécifique si on souhaite utiliser une fonctionnalité spécifique de l'OS (sans attendre que le framework cross plateforme l'implémente par exemple) mais on peut très bien faire du générique et ainsi profiter des avantages du natif avec qu'une seule version des sources.
En ce qui concerne "la compatibilité est gérée automatiquement", oui à condition d'être toujours à jour avec les dernières versions. Dans de grandes entreprises, tu peux avoir des contraintes qui font que des anciennes versions de navigateurs sont installées pour des besoins métiers (autres applications, progiciels...).

Citation Envoyé par L33tige Voir le message
C'est...euh...le point que je voulais soulever, il y à des garde fous bien plus importants quand on est moins bas niveau, ça permet de rajouter de l'idiotproof, ça permet aussi aux nuls de faire des choses qui marchouilles, que ça soit en bien ou en mal, mais je pense qu'il vaut mieux une bonne idée avec des perfs douteuses qu'une idée nul mais bien développée, je peux pardonner les perfs du moment que l'app fait ce qu'elle dit faire.
C'est bien ça le problème que je soulevais avec ma remarque sur le besoin de ressources importantes pour une majorité d'applis qui ne font pas grand chose... Personnellement, je préfère une bonne idée bien réalisée. Si un concurrent sort une application similaire à la tienne mais qui fonctionne mieux, les clients n'hésiteront pas longtemps... Enfin, je trouve qu'un développeur se doit de produire un code de qualité, lisible et maintenable. Ne pas se préoccuper du bon développement est une erreur grave.

Citation Envoyé par L33tige Voir le message
Si tu fais une webapp et que t'as eu besoin de faire du spécifique à une plateforme c'est qu'il y à un soucis.
Mais le sujet de cette discussion était de faire des applications mobiles et pour moi natif ne veut pas obligatoirement dire spécifique...
8  0 
Avatar de edenx
Nouveau membre du Club https://www.developpez.com
Le 23/01/2020 à 13:15
Déçu de pas voir Dart & Flutter dans cet article quand il est un langage/framework mobile qui connait une forte croissance en terme de popularité.
9  2 
Avatar de gbegreg
Membre expert https://www.developpez.com
Le 28/01/2020 à 11:53
Citation Envoyé par L33tige Voir le message
Oui et à la moindre mise à jour faut 3 personnes, 3 MeP, 3 projets à suivre... mouais.
Et oui, une seule personne peut le faire sur trois supports différents, mais on triple le temps, on augmente les erreurs possibles, on augmente la dette technique
Non, c'est du cross plateforme : 1 source unique et 3 compilations. Donc on ne triple pas le temps, ni les erreurs possibles pas plus que la dette technique. La dette technique est liée à la politique de l'éditeur de l'OS cible. La dette technique d'une application web est plus importante : souvent elle s'appuie sur une multitude de frameworks, nécessite au moins telle version de tel navigateur qui lui même s'appuie sur l'OS...

Quant à ta remarque "en partant du principe que les dev natifs sont pas des brelles" cela est valable pour tout : il peut aussi y avoir des développeurs web plus ou moins bons.
7  0 
Avatar de Le gris
Membre averti https://www.developpez.com
Le 29/01/2020 à 18:50
Encore un troll. Le meilleur langage c'est celui que tu maitrise le mieux et qui répond le mieux à tes besoins.
4  0 
Avatar de gbegreg
Membre expert https://www.developpez.com
Le 25/01/2020 à 10:19
Citation Envoyé par L33tige Voir le message
Oui mais en fait ça à rien à voir avec ce que je disais, j'ai dit que si t'as une webapp sur pc, un framework JS peut etre éventuellement une bonne idée pour la transposer sur support mobile, puisqu'au final des gens ont tendance à utiliser plus régulierement une appli du store qu'ouvrir le navigateur et se connecter
Ce n'est pas ce que tu as dit. Ton message était pour rappel "Bah si ton appli multiplateforme est aussi sur pc est est au final une webapp... ". Je te répondais non : mon appli n'a qu'une version des sources mais est compilée nativement pour chaque plateforme cible. Ce n'est pas une webapp.

Citation Envoyé par L33tige Voir le message

Quand aux comportements différents celon les navigateurs...bah c'est UN PEU un des buts principaux des frameworks js, c'est justement d'obtenir des résultats similaires peu importe le navigateur...
Oui c'est le but des principaux frameworks js mais il y a toujours des petites différences qui peuvent parfois être bloquantes. De plus, il faut toujours être à jour des versions des frameworks et des navigateurs. En entreprise, les utilisateurs n'ont souvent pas la possibilité de mettre à jour leur version de navigateur.

Citation Envoyé par L33tige Voir le message

Oui c'est moins performant, en même temps quand on voit le nombre d'applis nativs pourries faites par des script kiddies qui pullulent sur le store, elles auraient bien pu être en webapp, pour reprendre ton exemple, ça marche avec tout.
C'est en partie à cause de cela qu'on en est à avoir des smartphones équipés de 8 cœurs, des Go de RAM et qui tiennent difficilement 24h d'autonomie en utilisation simple...
3  0 
Avatar de strato35
Membre éclairé https://www.developpez.com
Le 23/01/2020 à 12:30
Développez-vous des applications mobile ? Sur quelle plateforme ?
Oui, principalement sur android.

Quel serait le langage de programmation que vous proposeriez pour un développement d'application mobile ?
J'utilise principalement Ionic (angular/cordova) pour l'hybride et java si besoin d'une appli native android (besoin de plus de puissance, rendus 3D etc..).

Êtes-vous plus porté vers le développement d'applications mobiles ou le développement d'applications web ? Pourquoi ?
Plutôt web, ça couvre plus de cas d'usage tout en permettant d'inclure une partie mobile si nécessaire avec des webview.
Et puis je trouve qu'internet est devenus suffisamment présent pour pouvoir se passer de clients lourds. Laisser la charge de travail au serveur et n'utiliser que l'interface web pour gérer l'interaction et la présentation me semble plus dans l'air du temps.

Si je suis amené à développer spécifiquement sur mobile c'est soit pour des cas précis de communication avec de l'IoT par exemple, ou alors que l'application n'est destinée qu'a un usage sur mobile nécessitant de la géolocalisation etc...

Tout dépends des projets.
2  0 
Avatar de gbegreg
Membre expert https://www.developpez.com
Le 23/01/2020 à 21:41
Je plussoie la remarque de grunk "Une fois de plus il n'ya pas de "meilleur" langage.".

Par contre, pour le développement multi plateforme pas de JS pour moi (laissons le à ce pourquoi il est fait : le web). Et par rapport à Xamarin, pas de doute je préfère Delphi
2  0