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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[Article] JavaScript est un langage fortement typé


Sujet :

JavaScript

Vue hybride

Bovino [Article] JavaScript est un... 09/08/2013, 16h32
SylvainPV Belle initiative ce recadrage... 09/08/2013, 17h33
skywaukers Alors si on part du principe... 10/08/2013, 08h22
Uther Tout dépend la définition... 10/08/2013, 09h51
sevyc64 Non ! Je fais parti de... 10/08/2013, 10h15
grim7reaper Salut, Comme tu le dis,... 10/08/2013, 10h23
FaridM En Java : String chaine... 10/08/2013, 11h20
tomlev L'argument de l'erreur de... 10/08/2013, 14h04
ternel Dans tous les langages typés,... 10/08/2013, 15h03
gl Pas vraiment. Le typage... 10/08/2013, 15h33
imikado Merci pour cet article, on en... 10/08/2013, 17h00
germinolegrand Pour ma part je dirais que... 10/08/2013, 18h07
esired J'apprécie beaucoup cet... 10/08/2013, 22h21
clementmarcotte Typé ou pas, Javascript est... 10/08/2013, 23h58
koyosama Je fais actuellement une... 11/08/2013, 01h15
stardeath totalement d'accord, je... 11/08/2013, 10h27
imikado Avec l'html5/css3/js on... 11/08/2013, 11h09
poringkiller Son nom indique aussi qu'il... 18/10/2013, 15h34
verbose Personnellement, j'ai un... 11/08/2013, 23h50
BugBlaster Bah moi je m'en moque 12/08/2013, 11h15
jfchretien Bonjour, A la lecture de... 12/08/2013, 13h18
FaridM La question n'est pas est-ce... 12/08/2013, 13h28
LSMetag Je vois quand même quelques... 12/08/2013, 13h33
yahiko Juste pour ajouter mon petit... 12/08/2013, 13h58
Loceka Non, il n'y a rien besoin de... 12/08/2013, 15h14
sjrd C'est évident, JavaScript est... 14/08/2013, 15h36
yahiko Certains points de ton post... 14/08/2013, 16h14
Darktib La définition de sjrd me... 14/08/2013, 22h13
TiranusKBX il ne doit pas y avoir... 15/08/2013, 10h16
guythom Le typage est l'essence de... 15/08/2013, 15h37
sekaijin Personnellement je ne me... 15/08/2013, 16h59
ptah35 Si je suis d'accord avec vous... 15/08/2013, 19h30
drazikh Je ne vois pas en quoi le... 16/08/2013, 12h16
sekaijin ce dernier exemple montre que... 16/08/2013, 17h51
23JFK Expliquer le typage fort par... 17/08/2013, 20h57
Invité google n'est pas le saint... 17/08/2013, 22h04
23JFK Google est quand même un gros... 17/08/2013, 22h30
tomlev Et tu crois que les gens qui... 17/08/2013, 23h09
stardeath c'est peut être que justement... 18/08/2013, 00h46
gl Au vu du reste de ton... 18/08/2013, 00h49
tomlev Pour ceux qui ne l'auraient... 18/08/2013, 02h46
sevyc64 Avant de juger ceux qui ont... 18/08/2013, 10h41
Invité on peut aussi se dire... 18/08/2013, 11h04
grim7reaper Et certains, qui ont un... 18/08/2013, 11h14
23JFK C'est un guerre de paroisse... 21/10/2013, 04h04
Invité Après la lecture de ce sujet... 19/08/2013, 11h03
ascito pour vous dire... en... 21/08/2013, 04h27
pjassemat Javascript fortement typé ??? 26/08/2013, 10h27
la.lune Dans quel langage, quelque... 05/12/2013, 18h10
Kaamo Je n'ai pas compris :koi: ... 06/12/2013, 12h25
la.lune J'ai lu tout le message de... 06/12/2013, 13h18
Kaamo join ne modifie pas tab ..... 06/12/2013, 14h14
sosolal pour moi, un langage... 22/03/2014, 16h02
la.lune Le langage C est un langage... 22/03/2014, 18h35
sosolal Je dirais que seul le... 23/03/2014, 12h28
sekaijin je trouve cela complètement... 23/03/2014, 18h14
phildepantin Pinaillage 10/09/2017, 09h04
pterrat JavaScript natif est un... 09/11/2017, 11h33
SylvainPV @pterrat: le code ci-dessous... 09/11/2017, 11h46
pterrat Tu as raison. Il me semble de... 09/11/2017, 13h32
Gabbby Pour moi, cet article est... 14/02/2018, 21h53
psychadelic @Gabbby Titrer que JavaScript... 15/02/2018, 01h30
tomlev Mais un langage fortement... 17/02/2018, 15h17
SylvainPV @tomlev: pour arriver à... 20/02/2018, 19h09
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2003
    Messages : 12
    Par défaut Bah moi je m'en moque
    Bah moi je m'en moque et je trouve que ce sujet ressemble un peu un troll.
    Pour ma part, développer en javascript est très amusant et je pas n'ai du tout envie qu'il finisse un jour par ressembler à C# ou Java.

  2. #2
    Membre du Club
    Homme Profil pro
    Analyste technique
    Inscrit en
    Septembre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Analyste technique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 9
    Par défaut
    Bonjour,

    A la lecture de vos différents posts, il me vient une petite réflexion sur les problématiques de typages. Et j'avoue que cela me laisse assez perplexe.

    Si je comprend bien, les typages forts sont principalement des contraintes que l'on retrouve dans les langages objet natif (Java, ...)
    A contrario, les typages faibles se retrouvent plus dans les langages de script (Javascript, Perl, ...)

    Ce que je ne comprend pas, c'est en quoi le typage fort/faible influe sur la qualité du code produit... Je m'explique. Pour moi, les contraintes sur les types se définissent dès la conception (dans un truc du genre modèle de données) et constituent des contraintes fonctionnelles.

    Si l'on choisit un langage fortement typé, on va contraindre chaque variable sur un type. Le contrôle du typage sera donc implicite. Mais il sera quand même nécessaire de catcher les erreurs de type et de les traiter.

    Si l'on choisit un langage faiblement typé, on va devoir implémenter les contrôles sur les types et la gestion des erreurs.

    Jusqu'à présent, la seule différence notable que j'ai vu, c'est dans l'art et la manière de ne pas gérer erreurs de type. Dans un langage comme Perl, on ne fait rien et on voit ce qui se passe. Dans un langage comme Java, on catche les erreurs et on les masque pour que le programme ne plante surtout pas à l'exécution...

    Dans tout les cas, pour moi ce sont des erreurs de conception et de développement.

    Tout ça pour poser cette simple question : en quoi le typage (fort, faible, statique, dynamique) est-il un critère pour définir si un langage est bon ou mauvais, sachant qu'un bon concepteur/développeur sera toujours capable de produire un code propre et fonctionnel quelque soit le langage ?

    Merci d'avance de vos réponses, ça m'aidera à y voir plus clair.

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 623
    Par défaut
    La question n'est pas est-ce que les langages a typages fort sont meilleurs que les langages a typages faibles, mais est-ce que JS est un langage a typage fort?

    Pour t'as question, ça dépend surtout des développeurs et du genre d'appli que tu veux construire.

    Certaines aiment quand tout est carré, tu déclare un int, tu met que des int dedans. D'autres aiment pouvoir mettre ce qu'ils veulent dans n'importe quelle variable.

  4. #4
    Membre éprouvé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2009
    Messages
    1 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 030
    Par défaut
    Citation Envoyé par jfchretien Voir le message
    Bonjour,

    A la lecture de vos différents posts, il me vient une petite réflexion sur les problématiques de typages. Et j'avoue que cela me laisse assez perplexe.

    Si je comprend bien, les typages forts sont principalement des contraintes que l'on retrouve dans les langages objet natif (Java, ...)
    A contrario, les typages faibles se retrouvent plus dans les langages de script (Javascript, Perl, ...)

    Ce que je ne comprend pas, c'est en quoi le typage fort/faible influe sur la qualité du code produit... Je m'explique. Pour moi, les contraintes sur les types se définissent dès la conception (dans un truc du genre modèle de données) et constituent des contraintes fonctionnelles.

    Si l'on choisit un langage fortement typé, on va contraindre chaque variable sur un type. Le contrôle du typage sera donc implicite. Mais il sera quand même nécessaire de catcher les erreurs de type et de les traiter.

    Si l'on choisit un langage faiblement typé, on va devoir implémenter les contrôles sur les types et la gestion des erreurs.

    Jusqu'à présent, la seule différence notable que j'ai vu, c'est dans l'art et la manière de ne pas gérer erreurs de type. Dans un langage comme Perl, on ne fait rien et on voit ce qui se passe. Dans un langage comme Java, on catche les erreurs et on les masque pour que le programme ne plante surtout pas à l'exécution...

    Dans tout les cas, pour moi ce sont des erreurs de conception et de développement.

    Tout ça pour poser cette simple question : en quoi le typage (fort, faible, statique, dynamique) est-il un critère pour définir si un langage est bon ou mauvais, sachant qu'un bon concepteur/développeur sera toujours capable de produire un code propre et fonctionnel quelque soit le langage ?

    Merci d'avance de vos réponses, ça m'aidera à y voir plus clair.
    Je vois quand même quelques avantages au typage fort. D'une part évidement côté développement pour éviter certains bugs à cause de conversions implicites hasardeuses ou d'absences (oubli) d'erreurs à l'exécution.
    D'autre part pour des raisons d'optimisation. Tu peux choisir un short plutôt qu'un int pour un petit nombre, et gagner en consommation mémoire. Tout type de données prend de la place en mémoire.
    Enfin, pour certaines personnes pas à l'aise avec le langage, elles peuvent faire des gros bricolages pour contourner ces problèmes. Bricolages pas forcément performants ou fiables.

  5. #5
    Rédacteur/Modérateur

    Avatar de yahiko
    Homme Profil pro
    Développeur
    Inscrit en
    Juillet 2013
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1 424
    Billets dans le blog
    43
    Par défaut
    Juste pour ajouter mon petit grain de sel à ce sympathique "troll" ^^, n'oublions pas non plus que le typage fort et statique permet l'Ahead Of Time compilation, ce qui apporte de sensibles gains de performances (cf. asm.js)

    De l'autre côté, l'avantage du typage faible et dynamique à la Javascript, c'est la rapidité et la concision pour le développeur de rédiger de petites fonctions, ce qui est tout à fait adapté au cas général des pages Web pour lequel il a été conçu. Pas besoin de déclarer ses variables à l'avance, pas besoin de typer ses variables, pas besoin de donner une signature à ses fonctions. Tant que le programme ne dépasse pas l'ordre de quelques milliers de lignes, le typage faible a tout à fait sa place.

    Maintenant, à une plus grande échelle, on se retrouve face à un problème de confiance envers le code, et ce, malgré toutes les relectures attentives et les tests unitaires effectués. D'où l'utilité de solutions complémentaires comme CoffeeScript, TypeScript pour adresser le problème des erreurs de typages ou encore, emScriptem (C++ -> JS) et asm.js pour la problématique des performances.
    Tutoriels et FAQ TypeScript

  6. #6
    Membre chevronné
    Inscrit en
    Juillet 2012
    Messages
    231
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 231
    Par défaut
    Citation Envoyé par yahiko Voir le message
    Pas besoin de déclarer ses variables à l'avance, pas besoin de typer ses variables, pas besoin de donner une signature à ses fonctions.
    Ça c‘est du typage dynamique, on peut faire la même chose en Python et Ruby.
    Le typage faible n’a rien à voir avec les exemples que tu cites.

    Et on peut même retrouver ça, dans une certaine mesure, avec du typage statique, pour peu qu’il y ai de l’inférence de type.

  7. #7
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Citation Envoyé par jfchretien Voir le message
    Si l'on choisit un langage fortement typé, on va contraindre chaque variable sur un type. Le contrôle du typage sera donc implicite. Mais il sera quand même nécessaire de catcher les erreurs de type et de les traiter.
    Non, il n'y a rien besoin de catcher vu que ça plante à la compilation, pas à l'exécution.

    Les seuls moments où tu as besoin de catcher sont lorsque tu "castes" un type en un autre type (String en int par exemple) car là il peut y avoir des valeurs non définies (l'ensemble des String n'a pas forcément d'équivalent sur l'ensemble des entier).

  8. #8
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    C'est évident, JavaScript est un langage fortement dynamiquement typé. Ces deux concepts sont orthogonaux :
    • JavaScript : fortement dynamiquement typé
    • Java : fortement statiquement typé
    • C/C++ : faiblement statiquement typé
    • Assembleur x86_64 : faiblement dynamiquement typé

    Un langage est statiquement typé si et seulement si le compilateur vérifie que toutes les manipulations des variables correspondent à un type system non trivial [1] donné, en supposant qu'il n'y a pas de cast non vérifiés au runtime (il peut y avoir des conversions). Si le type system est valide (sound en anglais), alors il ne peut y avoir d'erreur de type au runtime, par construction (il existe des type systems non valides, comme celui de TypeScript). C++ est donc statiquement typé, ainsi que Java, mais bien entendu, pas JavaScript, ni l'Assembleur (puisque RAX peut contenir tantôt un entier, tantôt un flottant, tantôt un pointeur).

    Un langage est faiblement typé si et seulement si les casts non vérifiés au runtime sont autorisés. C++, par exemple, a des casts non vérifiés. Java, bien qu'ayant des casts, est fortement typé car tous les casts sont vérifiés valides au runtime.
    JavaScript n'a pas du tout de cast (il n'a que des conversions), donc a fortiori tous ses casts sont vérifiés.

    Les langages faiblement dynamiquement typés sont très rares, car la seule chose qui permet au runtime de "savoir" comment considérer telle ou telle donnée, c'est par les opérations appliquées dessus. C'est ainsi que l'assembleur a des opérations différentes pour multiplier deux entiers signés ou deux entiers non signés.

    Je terminerai en précisant que tout ceci n'a rien à voir avec les conversions, et en particulier le fait qu'elles soient implicites ou explicites. Scala, par exemple, supporte les conversions implicites (même définies par le programmeur), pourtant je pense que personne n'oserait prétendre que Scala n'est pas un langage fortement statiquement typé.

    [1] Par non trivial, j'entends un type system avec au moins deux types de données. Sinon on peut dire que même JavaScript est statiquement typé, avec un type system composé d'un unique type de données, qui supporte toutes les opérations de l'univers.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  9. #9
    Rédacteur/Modérateur

    Avatar de yahiko
    Homme Profil pro
    Développeur
    Inscrit en
    Juillet 2013
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1 424
    Billets dans le blog
    43
    Par défaut
    Citation Envoyé par sjrd Voir le message
    Un langage est faiblement typé si et seulement si les casts non vérifiés au runtime sont autorisés. C++, par exemple, a des casts non vérifiés. Java, bien qu'ayant des casts, est fortement typé car tous les casts sont vérifiés valides au runtime.
    JavaScript n'a pas du tout de cast (il n'a que des conversions), donc a fortiori tous ses casts sont vérifiés.
    Certains points de ton post sont intéressants, ça me rappelle certains cours... ^^. J'aurais aimé savoir pour ma culture la source sur laquelle tu te bases pour ta définition de langage faiblement typé.
    Tutoriels et FAQ TypeScript

  10. #10
    Membre éclairé Avatar de Darktib
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 66
    Par défaut
    La définition de sjrd me semble assez intéressante et claire.

    JavaScript n'a pas du tout de cast (il n'a que des conversions), donc a fortiori tous ses casts sont vérifiés.
    C'est inexact. S'il n'y a pas de cast, alors tous les casts sont à la fois vérifiés et non vérifiés (l'ensemble des casts étant l'ensemble vide). Ils sont aussi autorisés et non autorisés.

    Il en ressort que Javascript est à la fois faiblement et fortement typé (ce qui risque de faire plaisir à tout le monde )


    Plus sérieusement, avec cette définition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    faiblement typé <=> (pour tout cast X, X non vérifié au runtime => autorisé)
    La deuxième partie étant toujours vraie pour Javascript, la première l'est aussi. Donc cette définition implique que Javascript est faiblement typé. CQFD

  11. #11
    Membre éprouvé
    Avatar de TiranusKBX
    Homme Profil pro
    Développeur C, C++, C#, Python, PHP, HTML, JS, Laravel, Vue.js
    Inscrit en
    Avril 2013
    Messages
    1 476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur C, C++, C#, Python, PHP, HTML, JS, Laravel, Vue.js
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 476
    Billets dans le blog
    6
    Par défaut
    il ne doit pas y avoir d'identification du typage fort ou faible sur la base de la syntaxe du langage mais sur la spécificité à la compilation de ce fait si vous ne regardez pas comment fonctionne le compilateur javascript inutile de commenter et donc vous ne savez rien ! c'est trop facile de troller avec des fait non vérifié preuve à l'appuis

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Par défaut
    Le typage est l'essence de l'info pro
    Soyons clair si l'ordi ne pouvait distingué
    1 et 1.0 l'informatique ce du non sens et ne serait pas aussi efficace pour
    les calculs scientifiques
    Un langage script restera un langage script
    Et JS à la base est un langage script
    Ce n'est donc pas suprenant qu'il ait les défauts de tous les langages script:
    "Impossible d'y developper une appli puissante et serieuse meme en compilation native avec optimisation
    JavaScript n'est pas fortement typé
    Que celui veut parler de typage aille voir Java , C/C++,Ada et Objective C

  13. #13
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Personnellement je ne me prononcerais pas.
    Pour moi, ce n'est pas une question.

    Certains voient dans le mécanisme de typage de JS un problème.
    Moi j'y vois une force.

    D'ailleurs ce que fait naturellement JS est très péniblement reproduit avec des langages dits fortement typés. par exemple l'API réflexion de java ou le runtime Objective-C
    Tous deux n'ont pour but que de passer outre les contraintes du modèle de programmation à base de classes.

    Je ne me pose donc pas la question de savoir si, oui ou non, le langage est fortement typé. JS est un langage ou les définitions sont dynamiques et une fois qu'on a compris ça il suffit d'en tirer parti.

    Tout comme lorsque j'utilise les langages à base de classe j'essaie de tirer, le meilleur partit du modèle de langage à base classes.
    Lorsque j'utilise EcmaScript j'utilise au mieux la définition dynamique et la notion de prototype.

    Pour moi, JS est un tas de références.
    Une variable est une référence sur un objet comme en C++.
    Lorsqu'on référence un autre objet (avec le même nom), il est logique que le type de l'objet ne soit pas nécessairement le même.

    Est-il important qu'un nom de variable soit contraint à ne référencer qu'un seul type d'objet ?

    Si cela peut être utile, il est tout aussi pertinent de ne pas avoir cette contrainte.
    Car au final lorsque le langage impose ce genre de contrainte on en vient à la contourner.
    Par exemple en java en utilisant la classe Object pour référencer tout et n'importe quoi.

    Alors, tirez le meilleur de chaque langage et faites des caractéristiques de chacun une force.

    A+JYT

  14. #14
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Par défaut
    Citation Envoyé par sekaijin Voir le message
    Je ne me pose donc pas la question de savoir si, oui ou non, le langage est fortement typé. JS est un langage ou les définitions sont dynamiques et une fois qu'on a compris ça il suffit d'en tirer parti.
    Si je suis d'accord avec vous à propos des forces de JavaScript, je pense que vous passez à côté de la question. JavaScript est un langage dynamiquement typé et en ce qui me concerne ce n'est pas du tout une mauvaise chose. Cependant un langage à typage dynamique peut être également fortement typé en évitant les conversions implicites.

    Par exemple, JavaScript accepte que l'on utilise des opérandes de types différents avec les opérateurs arithmétiques :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var p;
    p = "2" * 2;
    La chaîne "2" est implicitement convertie en numérique avant que la multiplication soit effectuée et le résultat affecté à p. Essayons maintenant une expression un peu plus complexe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var res;
    res = ("2" + 2) * 2;
    on se trouve cette fois avec un comportement étrange puisque res ne contient pas 8 comme on serait en droit de l'attendre, mais 44. Ce comportement est bien sûr facilement explicable : l'opérateur + est utilisé à la fois comme opérateur arithmétique et comme opérateur de concaténation et cet c'est dernière opération qui a été effectuée. Mais pourquoi le "2" n'a-t-il pas été converti en numérique comme pour le produit ? La réponse se trouve dans l'arbitraire de la spécification du langage et c'est là tout le problème. Sans conversion implicite, ces instructions ne seraient pas valides. Ce serait alors au programmeur d'effectuer les conversions nécessaires, ce qui aurait pour effet de rendre le code moins ambigu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var res;
    res = (parseInt("2") + 2) * 2;
    Je suis le premier à défendre JavaScript et à reconnaître ses qualités -- ne serait-ce que parce qu'il est incontournable et que par principe, lorsque je n'ai pas ce que j'aime, je m'applique à aimer ce que j'ai -- mais le choix qui a été fait de faire des conversions implicites, peut-être avec l'intention louable de simplifier la vie du programmeur, a finalement pour effet de la lui rendre plus difficile.

  15. #15
    Invité de passage
    Profil pro
    Inscrit en
    Août 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 1
    Par défaut
    Je ne vois pas en quoi le dernier exemple prouve quoi que ce soit. J'espère bien qu'appliquer une méthode à mon tableau ne va pas modifier son type... Pour moi c'est un comportement tout à fait normal.

  16. #16
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    ce dernier exemple montre que js est comme tout langage il possède quelques pièges

    l'opérateur + existe pour les nombres et effectue une somme et pour les chaines où il effectue une concaténation.
    alors que l'opérateur * n'existe que pour les nombres.

    Cela associé au transtypage automatique peut amener le developpeur peu au fait du langage à des erreurs.

    perso je préfèrerais que dans tous les langages il n'y ait pas de distinction entre les types primitifs et les autres.

    il en va ainsi de tous les langages.

    en C++ par exemple a + b est en fait l'appel de la methode operator + sur l'objet a pareil pour a == b une erreur fréquente est d'oublier qu'on ne peux pas appliquer une methode à l'objet null.

    pour moi le fait de pouvoir écrire se genre de choses (tout comme l'exemple ci dessus) c'est du sucre syntaxique. et je serais tout aussi disposer à m'en passer.

    mais avouons le, nous aimons en écrire le moins possible
    A+JYT

  17. #17
    Inactif  
    Profil pro
    undef
    Inscrit en
    Février 2013
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : undef

    Informations forums :
    Inscription : Février 2013
    Messages : 1 001
    Par défaut
    Expliquer le typage fort par le fait que on peut "additionner des nombres et des chaines!" ne suffit pas à caractériser un typage fort ou faible dans la mesure où il y a utilisation d'un opérateur qui, surchargé, définit un type de retour indépendamment de la nature de la variable de stockage. Un typage fort veut dire qu'une fois que l'on a assigné un type à une variable, il n'est plus possible d'y mettre autre chose que des valeurs du type désigné lors de la définition. Mais les précédents commentaires expriment souvent bien mieux que je ne le pourrais ce qu'est la notion de typage. L'ultime indice qui exclut la javascript de la famille des langages fortement typés nous est fournit par google qui, en développant le dart, ambitionne de fournir aux développeurs de javascript un langage fortement typé chargé de s'assurer de la bonne utilisation les contraintes induites par un typage fort et de réduire ainsi la possibilité d'erreurs et d'attaques que l'on rencontre quand l'on peut à loisirs substituer un type par un autre.

  18. #18
    Invité
    Invité(e)
    Par défaut
    L'ultime indice qui exclut la javascript de la famille des langages fortement typés nous est fournit par google qui, en développant le dart, ambitionne de fournir aux développeurs de javascript un langage fortement typé chargé de s'assurer de la bonne utilisation les contraintes induites par un typage fort et de réduire ainsi la possibilité d'erreurs et d'attaques que l'on rencontre quand l'on peut à loisirs substituer un type par un autre.
    google n'est pas le saint grall de la réponse ultime et universel sur la façon de concevoir la programmation.

    qui peut pretendre que le typage fort doit être une obligation pour tous langages un peut comme une pensée unique a croire que le changement en cour de route du type est une aberation.

  19. #19
    Inactif  
    Profil pro
    undef
    Inscrit en
    Février 2013
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : undef

    Informations forums :
    Inscription : Février 2013
    Messages : 1 001
    Par défaut
    Citation Envoyé par mekal Voir le message
    google n'est pas le saint grall de la réponse ultime et universel sur la façon de concevoir la programmation.

    qui peut pretendre que le typage fort doit être une obligation pour tous langages un peut comme une pensée unique a croire que le changement en cour de route du type est une aberration.
    Google est quand même un gros nid d'ingénieurs, et ils ont dû réfléchir un minimum à l'utilité d'un outil de développement capable de générer du code javascript obéissant aux règles d'un typage fort, réflexion qui n'aurait eu aucun sens si javascript avait été d’emblée un langage typé.

    Un typage n'est pas une obligation, mais cela rend le code plus sécuritaire, stable et cohérent, rien qu'en phase de débuggage, ne pas avoir à se demander ce que contient en réalité une variable peut simplifier grandement le travail.

  20. #20
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par 23JFK Voir le message
    Google est quand même un gros nid d'ingénieurs, et ils ont dû réfléchir un minimum à l'utilité d'un outil de développement capable de générer du code javascript obéissant aux règles d'un typage fort, réflexion qui n'aurait eu aucun sens si javascript avait été d’emblée un langage typé.
    Et tu crois que les gens qui ont conçu des langages à typage faible n'y ont pas aussi "réfléchi un minimum" ?

    (je préfère de loin le typage fort, mais je me fais l'avocat du diable )

Discussions similaires

  1. Réponses: 31
    Dernier message: 21/02/2018, 18h15
  2. Réponses: 9
    Dernier message: 27/02/2010, 21h15
  3. Réponses: 2
    Dernier message: 15/01/2010, 17h52
  4. Réponses: 2
    Dernier message: 15/01/2010, 17h52
  5. Réponses: 1
    Dernier message: 05/10/2007, 17h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo