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

  1. #1
    R�dacteur

    Avatar de Bovino
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par d�faut [Article] JavaScript est un langage fortement typ�


    Parmi les nombreuses critiques formul�es � l'encontre de JavaScript par ses d�tracteurs, celle qui revient surement le plus souvent est que JavaScript est un langage faiblement typ�.

    Or, selon le principe qu'une v�rit� est un mensonge mille fois r�p�t�, cette assertion selon laquelle JavaScript est un langage faiblement typ� est devenue une v�rit� pour quasiment tout le monde (moi y compris pendant longtemps), sans que personne ne prenne le temps de r�fl�chir au probl�me.

    J'ai donc voulu effectuer des recherches ici ou l� pour v�rifier cette affirmation. Quel ne fut pas mon d�sarroi en constatant qu'au final, il est tr�s compliqu� de savoir si un langage est � typage faible ou fort ! Les avis des plus �minents et avis�s des d�veloppeurs sont souvent divergents, parfois contradictoires.

    Alors basons-nous sur quelques faits.

    Pourquoi dit-on que JavaScript est faiblement typ� ?
    En fait, les arguments se r�sument bien souvent � expliquer qu'on peut additionner des nombres et des chaines !
    La r�alit�, c'est qu'effectivement, tout op�rateur renvoie un r�sultat en JavaScript, quitte � modifier le type de l'un des op�randes.
    Mais cela n'a rien � voir avec un typage fort ou faible : il ne s'agit l� que d'une notion de typage dynamique.
    Donc effectivement, pour chaque op�rateur, des r�gles existent pour d�terminer comment modifier dynamiquement le type d'un ou plusieurs op�randes afin de pouvoir toujours renvoyer un r�sultat.

    Notez au passage que le code suivant :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    var nb = 42;
    var txt = 'foo';
    console.log('nb : ', typeof nb, 'txt : ', typeof txt);
    var resultat = nb+txt;
    console.log('resultat : ', typeof resultat, 'nb : ', typeof nb, 'txt : ', typeof txt);
    Affichera
    nb : number txt : string
    resultat : string nb : number txt : string
    Le typage dynamique n'affecte donc pas le type des op�randes.

    Pourquoi JavaScript serait un langage fortement typ� ?
    La r�ponse courte serait tout simplement du fait de la pr�sence d'erreurs de type en JavaScript !

    En d�taillant un peu, il faut consid�rer tout d'abord que JavaScript est un langage orient� objet dans lequel tout (absolument tout) est objet. M�me si les types primitifs d�clar�s � l'aide de litt�raux n'h�ritent pas de la m�me chaine de prototypes qu'avec un constructeur, ce sont malgr� tout des objets.
    De ce fait, � part avec les op�rateurs, les seules manipulations que l'on peut faire sur des variables correspondent � des m�thodes d'objets. Or si vous appliquez une m�thode � un objet dont le type n'est pas conforme, vous obtiendrez une erreur de type.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    console.log(12..push(3)); // TypeError: 12.push is not a function
    console.log(12..charAt(1)); // TypeError: 12.charAt is not a function
    console.log([1,2,3,4].toFixed(2)); // TypeError: [1, 2, 3, 4].toFixed is not a function
    On pourrait multiplier les exemples !
    Notez toutefois que le param�tre pass� � la m�thode peut lui �tre transtyp� dynamiquement afin d'obtenir un r�sultat.

    Tout est donc clair maintenant : JavaScript est bel et bien un langage fortement typ� !

    Le mot de la fin
    Pour terminer, certains "puristes" du typage fort vous diront qu'en fait, un typage fort existe si le type est d�fini � la cr�ation de la variable.
    Alors effectivement, ce n'est pas forc�ment le cas en JavaScript, en revanche, le type est d�termin� une fois pour toutes � la d�finition de la variable.
    En effet, nous avons vu que le typage dynamique n'affecte pas en r�alit� le type de la variable, mais pour aller plus loin, il n'existe aucun m�canisme en JavaScript pour modifier r�ellement en JavaScript ! Aucun op�rateur, aucune fonction n'existe pour cela !
    Oh... j'en entends d�j� se gausser : "sur ce coup l�, on va vite le coincer !"
    Et oui, si vous faites
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    var nb = 42;
    console.log(typeof nb); // number
    nb = 'foo';
    console.log(typeof nb); // string
    Le seul hic, c'est que l� vous n'avez pas transtyp� la variable nb, vous l'avez juste red�finie !
    Mais faites par exemple
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    var tab = [1,2,3];
    tab.join(',');
    console.log(Array.isArray(tab)); // true
    La m�thode join() a renvoy� une valeur de type chaine, mais n'a pas touch� au type de tab.

    Qu'en pensez-vous ?
    Consid�rez-vous comme moi qu'au final, JavaScript est fortement typ� ?
    Si oui, avez-vous d'autres arguments pour �tayer cette affirmation ?
    Au contraire, me prenez-vous pour un illumin� ?
    Dans ce cas, quels arguments vous font penser cela ?
    Pas de question technique par MP !
    Tout le monde peut participer � developpez.com, vous avez une id�e, contactez-moi !
    Mes formations video2brain : La formation compl�te sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'int�gration de JSFiddle et CodePen sur le forum

  2. #2
    R�dacteur/Mod�rateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par d�faut
    Belle initiative ce recadrage

    Bon apr�s tout est histoire de d�finition. Et je pense que tu auras du mal � convaincre que JS est fortement typ� en montrant des bouts de code comme �a:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    var hi = "Hello !";
    hi = 83110;
    hi = ["H","e","l","l",0] ;
    hi = function(){ alert("Hello !"); };
    On peut se demander � juste titre pourquoi on appellerait �a un typage fort quand on d�clare une variable sans son type, quand tous les objets sont mutables, quand on peut m�langer les types dans les Array... Moi j'appelle �a du typage open-bar

    M�me si les types primitifs d�clar�s � l'aide de litt�raux n'h�ritent pas de la m�me chaine de prototypes qu'avec un constructeur, ce sont malgr� tout des objets
    L� encore question de d�finition. On notera quand m�me que:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    "primitif" instanceof Object === false
    Alors forc�ment c'est dur de s'entendre l�-dessus.

    Au contraire, me prenez-vous pour un illumin� ?
    Il n'y a pas beaucoup de diff�rence entre un illumin� et une lumi�re

  3. #3
    R�dacteur

    Avatar de danielhagnoul
    Homme Profil pro
    �tudiant perp�tuel
    Inscrit en
    F�vrier 2009
    Messages
    6 389
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant perp�tuel
    Secteur : Enseignement

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par d�faut
    Je crois que le "typage fort" ne passera pas.

    Le "typage dynamique", la red�finition du type, g�nera toujours les puristes.

    Mais il est clair que si l'on attribue un type lors de la d�finition (var n = 0; au lieu d'un simple var n;), on peut s'y fier. Seule la red�finition modifiera le type de n.

    JS est comme toujours hors-norme, on dira donc qu'il a un "typage solide".

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues � un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  4. #4
    Membre �clair�

    Femme Profil pro
    Experte JS / Conseill�re en best practices / Chercheuse en programmation
    Inscrit en
    Octobre 2007
    Messages
    741
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activit� : Experte JS / Conseill�re en best practices / Chercheuse en programmation
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 741
    Par d�faut
    Pour moi, la seule diff�rence entre un langage fortement typ� et un faiblement typ�, c'est la possibilit�, pour le d�veloppeur, de faire n'importe quoi ou pas et de devoir assumer (ou pas) ses erreurs.

    Je dirais donc qu'il y a des d�veloppeurs fortement/faiblement typ�s.

  5. #5
    Membre extr�mement actif
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 219
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activit� : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 219
    Par d�faut
    Alors si on part du principe effectivement que Javascript est fortement typ� parce qu'en fait il affecte dynamiquement le type de la variable, quel langage n'est pas fortement typ� ?

    Personnellement l'exemple que vous donnez vous m�me me heurte :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    var nb = 42;
    console.log(typeof nb); // number
    nb = 'foo';
    console.log(typeof nb); // string
    Ok le typage est dynamique. Mais le principe du typage fort �tant justement de limiter les erreurs de programmation, on ne peut pas dire que le contrat soit rempli. L� ok il y a 2 lignes d'�cart entre les deux afefctation, mais ce genre de chose, noy�e dans le code peut faire chercher un bug pas mal de temps.
    Et justement pour moi un langage fortement typ� impose que dans une m�me port�e, une variable qui a un type n'en change pas en cours de route (et surtout pas dynamiquement !!)

    @++
    Dany

  6. #6
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 691
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyr�n�es Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 691
    Par d�faut
    Citation Envoy� par Bovino
    Consid�rez-vous comme moi qu'au final, JavaScript est fortement typ� ?
    Tout d�pend la d�finition exacte de langage fortement typ�, j'en ai vu plusieurs diff�rente dont la plupart excluent sans ambigu�t� le Javascript. D'autres qui excluraient plut�t le C et le C++.
    J'aimerai bien avoir votre d�finition � vous.

    Personnellement, quand je suis dans l'impossibilit� de connaitre simplement avec exactitude le type des variables que je manipule, alors que je le suis parfaitement avec des langages pourtant � priori faiblement typ�s, j'ai du mal a me dire que j'ai a faire a un langage avec un typage fort.

    Citation Envoy� par Bovino
    Au contraire, me prenez-vous pour un illumin� ?
    Non pour un tatillon qui joue sur les mots pour tourner autour du probl�me.
    Peu importe que le probl�me soit le typage dynamique ou faible, il n'en reste pas moins qu'il est quand m�me l�.

  7. #7
    Mod�rateur
    Avatar de sevyc64
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 251
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 52
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 251
    Par d�faut
    Citation Envoy� par Bovino Voir le message
    Consid�rez-vous comme moi qu'au final, JavaScript est fortement typ� ?
    Non !

    Je fais parti de ceux qui d�finissent un langage fortement typ� par le fait que l'on d�finie explicitement le type d'une variable lors de sa d�finition et que celui ci ne puisse pas changer m�me par une red�finition implicite.
    Pour moi, Javascript (tel que tu l'explique et que je ne connais pas) est faiblement typ�, le type de la variable �tant d�fini par le compilo � sa premi�re affectation (et m�me red�finie � chaque affectation si j'ai bien compris ta d�mo).

    Citation Envoy� par Bovino Voir le message
    Au contraire, me prenez-vous pour un illumin� ?
    Pas du tout, mais pour moi, tu ne d�montre en rien que Javascript est fortement ou faiblement typ�, tu d�montre juste qu'il est typ�, que l'on ne peut pas tout � fait faire ce que l'on veut


    Et personnellement, peut-�tre par facilit� d'esprit, je pr�f�re largement les langages fortement typ�s (selon ma d�finition).

  8. #8
    Membre chevronn�
    Inscrit en
    Juillet 2012
    Messages
    231
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 231
    Par d�faut
    Salut,

    Citation Envoy� par Bovino Voir le message
    Quel ne fut pas mon d�sarroi en constatant qu'au final, il est tr�s compliqu� de savoir si un langage est � typage faible ou fort ! Les avis des plus �minents et avis�s des d�veloppeurs sont souvent divergents, parfois contradictoires.
    Comme tu le dis, il n�y a pas de d�finition commun�ment accept� pour les notions de typages faibles et forts (au contraire des notions de typages dynamiques et statiques, qui elles sont plus clairement d�finies).
    En fait, tel que je le vois, la force d�un typage est relative. Par exemple le C++ a un typage fort par rapport au C, mais son typage est faible par rapport � Haskell. Pour les langages dynamiques, le typage de Javascript est faible par rapport � Python ou Ruby.

    On ne peut pas d�finir un langage comme �tant typ� faiblement ou fortement de mani�re absolue (tout du moins, �a ne fera s�rement pas consensus).

    Apr�s, je pense que, si l�on consid�re l�ensemble des langages, Javascript est quand m�me plut�t dans la partie typ� faiblement que dans la partie typ� fortement.
    On pourrait mesurer la faiblesse de typage d�un langage par rapport au possibilit�s de conversions implicites qu�il offre. Plus il y a de conversions implicites, plus le typage est faible (car il est plus facile de faire des conversions entre les types et de m�langer des types diff�rents dans une m�me op�ration), � contrario moins de conversion explicite => typage plus fort.
    Je pourrais aussi citer un autre crit�re, mais comme l� on parle de langage dynamique �a serait un peu HS.


    Citation Envoy� par Bovino Voir le message
    La r�alit�, c'est qu'effectivement, tout op�rateur renvoie un r�sultat en JavaScript, quitte � modifier le type de l'un des op�randes.
    Mais cela n'a rien � voir avec un typage fort ou faible : il ne s'agit l� que d'une notion de typage dynamique.
    Donc effectivement, pour chaque op�rateur, des r�gles existent pour d�terminer comment modifier dynamiquement le type d'un ou plusieurs op�randes afin de pouvoir toujours renvoyer un r�sultat.
    Et c�est bien �a qui, pour moi, fait de Javascript un langage � typage faible.
    Car il doit absolument fournir un r�sultat, et pour cela il va passer par des conversions implicites (les r�gles dont tu parles) afin de produire une valeur.
    Je ne connais pas trop Javascript, mais des bouts de codes que j�ai vu il semble y en avoir pas mal de ces r�gles de c�rcition qui agissent de mani�re implicite (le d�veloppeur n�a pas besoin d�ajouter un cast ou de faire appel � une fonction pour convertir le type).
    Ce n�est pas un mal en soi, mais �a fait de lui un langage faiblement typ� (de mon point de vue).

    Et non, ce n�est pas juste � une notion de typage dynamique � car Python et Ruby (typ� dynamiquement) ne permettent pas d�additionner les nombres et les cha�nes de caract�res.

    Citation Envoy� par Bovino Voir le message
    Notez au passage que le code suivant :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    var nb = 42;
    var txt = 'foo';
    console.log('nb : ', typeof nb, 'txt : ', typeof txt);
    var resultat = nb+txt;
    console.log('resultat : ', typeof resultat, 'nb : ', typeof nb, 'txt : ', typeof txt);
    Affichera
    nb : number txt : string
    resultat : string nb : number txt : string
    Le typage dynamique n'affecte donc pas le type des op�randes.
    Le typage faible, ce n�est pas uniquement une histoire de changement de type, c�est aussi de permettre de m�langer des types facilement dans des op�rations.
    Et en fait si, le type des op�randes est affect�, mais c�est une promotion temporaire (comme ce que l�on voit en C quand on appelle une fonction qui prend un long avec un int).

    Citation Envoy� par Bovino Voir le message
    Pourquoi JavaScript serait un langage fortement typ� ?
    La r�ponse courte serait tout simplement du fait de la pr�sence d'erreurs de type en JavaScript !
    Oui mais non.
    Typage faible ne signifie pas absence de typage.
    Encore une fois, ces histoires de typages faible/fort ce n�est pas binaire. Ce n�est pas tout ou rien.
    � partir du moment o� il y a typage (typage faible signifiant qu�il y a bien un typage), oui on risque d�avoir des erreurs de types. Heureusement d�ailleurs.
    Mais �a n�est pas un argument pour dire que c�est un langage fortement typ�.


    Citation Envoy� par Bovino Voir le message
    En d�taillant un peu, il faut consid�rer tout d'abord que JavaScript est un langage orient� objet dans lequel tout (absolument tout) est objet. M�me si les types primitifs d�clar�s � l'aide de litt�raux n'h�ritent pas de la m�me chaine de prototypes qu'avec un constructeur, ce sont malgr� tout des objets.
    De ce fait, � part avec les op�rateurs, les seules manipulations que l'on peut faire sur des variables correspondent � des m�thodes d'objets. Or si vous appliquez une m�thode � un objet dont le type n'est pas conforme, vous obtiendrez une erreur de type.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    console.log(12..push(3)); // TypeError: 12.push is not a function
    console.log(12..charAt(1)); // TypeError: 12.charAt is not a function
    console.log([1,2,3,4].toFixed(2)); // TypeError: [1, 2, 3, 4].toFixed is not a function
    On pourrait multiplier les exemples !
    Notez toutefois que le param�tre pass� � la m�thode peut lui �tre transtyp� dynamiquement afin d'obtenir un r�sultat.

    Tout est donc clair maintenant : JavaScript est bel et bien un langage fortement typ� !
    Je ne suis pas d�accord avec ta conclusion.
    Tu d�montres juste que Javascript est typ�, mais pas que son typage est fort.
    D�ailleurs, vu que tu parles de transtypage dynamique on peut penser que �a penche plus vers le faible que le fort (mais encore une fois cela d�pend des conditions de transtypage, si elles sont laxistes ou pas).

    Citation Envoy� par Bovino Voir le message
    Le mot de la fin
    Pour terminer, certains "puristes" du typage fort vous diront qu'en fait, un typage fort existe si le type est d�fini � la cr�ation de la variable.
    Personnellement non, ce n�est pas ma d�finition du typage fort.
    De mon point de vue, �a �a rentrerait plus dans la cat�gorie typage statique/dynamique.


    Citation Envoy� par Bovino Voir le message
    Consid�rez-vous comme moi qu'au final, JavaScript est fortement typ� ?
    Pour conclure, non je ne suis pas d�accord avec toi (pour les raisons �nonc�s plus haut).
    Pour moi Javascript est un langage � typage dynamique et faible.
    �a ne veux pas dire que je consid�re Javascript comme un mauvais langage (et ne faisant pas de Javascript je serai bien mal plac� pour le juger).
    Je ne juge pas si le typage faible c�est bien ou mal (mais j�ai une pr�f�rence personnelle pour le typage fort), mais je consid�re Javascript comme �tant typ� faiblement.

    Citation Envoy� par Bovino Voir le message
    Au contraire, me prenez-vous pour un illumin� ?
    Dans ce cas, quels arguments vous font penser cela ?
    Je ne te prends pas pour un illumin� non, �a ne serait pas tr�s sympa.
    Mais je ne suis pas d�accord avec toi, pour les arguments cf. plus haut.

  9. #9
    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
    En Java :

    Code java : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    String chaine = "Bonjour";
     
    chaine = 2; // Pas de nombre dans un String
     
    chaine = "2"; // Ok 
     
    int a = chaine; // Pas de conversion implicite
     
    a = Integer.parseInt(chaine); // Si possible OK sinon NumberFormatException

    Ici, tu ne pourras jamais mettre autre chose que des int dans la variable "a". Tu peux caster la valeur de la variable pour la mettre dans une autre variable d'un autre type mais "a" pourra recevoir que des int. Ca c'est du typage fort.

    En Javascript :

    Code javascript : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    var a; // C'est quoi sont type?
     
    a = 12; // La je viens de dire que a est un integer Ok
     
    a = "Hi !" // Je viens de mettre un string dans une variable de type int...
     
    a = function() {
    	alert("WHAT");
    }; // Maintenant une fonction
     
    alert(a + 2 + "WTFJS !!"); // Pas d'erreur ici, tout est normal :)

  10. #10
    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
    L'argument de l'erreur de type sur l'appel d'une fonction qui n'existe pas ne veut pas dire grand chose... en tous cas �a ne montre pas que c'est un langage fortement typ�. Selon toi, un langage faiblement typ� serait un langage o� 12..push(3) ne provoquerait pas d'erreur ? D'apr�s cette d�finition, il ne doit pas y avoir beaucoup de langages faiblement typ�s

  11. #11
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    Dans tous les langages typ�s, les valeurs sont intrins�quement typ�es.
    Dans "var i = 2", 2 est un entier, et i une variable.
    dans "int i = 2" aussi. C'est juste que l�, on pr�cise en plus que i soit une variable contrainte � contenir un type i.


    Comme on ne peut pas �crire "2 = 4", c'est � dire modifier une valeur, bien s�r qu'on ne peut pas non plus changer son type.

    Donc toutes les valeurs, dans tous les langages (typ�s), sont totalement et strictement typ�es.

    Les consid�rations de qualit�s de typage portent sur les variables elles-m�mes.
    Dans cette consid�ration, JavaScript n'a pas de type de variable, il est le plus faiblement typ� qu'on puisse.
    C, Java et C++ poss�dent des types de variables, ca les placent dans la cat�gorie des langage fortement typ�s (j'ai parfois lu "var-typed").
    D'ailleurs, comme en Java, il n'y a pas de slicing � la C++, on pourrait dire qu'il est un peu moins fortement typ� que celui-ci.

    Dire que Java-script est fortement typ� me semble un peu d�cal� avec la d�finition classique de la "force" de typage.

  12. #12
    gl
    gl est d�connect�
    R�dacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 46
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par d�faut
    Citation Envoy� par Bovino Voir le message
    La r�alit�, c'est qu'effectivement, tout op�rateur renvoie un r�sultat en JavaScript, quitte � modifier le type de l'un des op�randes.
    Mais cela n'a rien � voir avec un typage fort ou faible : il ne s'agit l� que d'une notion de typage dynamique.
    Pas vraiment.
    Le typage dynamique tient plus au fait que le type n'est pas port�e par la variable elle-m�me mais par la valeur qu'elle contient et donc que le type peut �voluer au cours du programme lorsqu'on r�affecte une valeur � la variable.
    Ce que tu d�cris ici, les conversions implicites, tiennent plus de la force du typage que de son aspect statique/dynamique.


    Citation Envoy� par Bovino Voir le message
    Pour terminer, certains "puristes" du typage fort vous diront qu'en fait, un typage fort existe si le type est d�fini � la cr�ation de la variable.
    Ca par contre (d�termination du type de la variable � sa cr�ation) est de l'ordre du typage statique, pas de la force du typage.


    Citation Envoy� par sevyc64
    Je fais parti de ceux qui d�finissent un langage fortement typ� par le fait que l'on d�finie explicitement le type d'une variable lors de sa d�finition et que celui ci ne puisse pas changer m�me par une red�finition implicite.
    L'aspect d�termination du type � la cr�ation de la variable ou changement en fonction de la valeur que l'on y stocke s'est de l'ordre du typage statique/dynamique.
    Quant � l'aspect explicite de la d�claration, c'est encore autre chose. On rentre ici dans le c�t� d�claratif vs. inf�r� du typage statique.



    Sinon, un gros +1 � grim7reaper sur sa remarque concernant l'aspect non binaire du typage fort/faible (ainsi que sur son excellente explication).

  13. #13
    R�dacteur
    Avatar de imikado
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    D�cembre 2006
    Messages
    5 239
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 5 239
    Billets dans le blog
    17
    Par d�faut
    Merci pour cet article, on en apprend tous les jours
    Framework php s�curis� et simple � prendre en main avec g�n�rateur web http://mkframework.com/ (heberg� sur developpez.com)
    Mes cours/tutoriaux

  14. #14
    Membre Expert

    Avatar de germinolegrand
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    Octobre 2010
    Messages
    738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de D�me (Auvergne)

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2010
    Messages : 738
    Par d�faut
    Pour ma part je dirais que les notions de typage visiblement sont des notions tr�s faiblement d�finies � d�faut d'�tre typ�es ...

    Je trouve pour ma part que le JS compl�te plut�t bien l'approche du C++ en restant dans du typage similaire. De mon �il de dev C++, je vois les variables JS comme �tant des pointeurs (des shared_ptr pour �tre exact) et non des objets. Et je constate que si vous pouvez changer l'objet point�, vous ne pouvez pas changer le type de l'objet en question. Vous pouvez changer la valeur du pointeur (ce que bovino appelle red�finir), mais jamais vous ne travestirez une Voiture en une Carotte. Un exemple tout simple, c'est le code ci-dessous :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    var a;
    var b = "coucou";
     
    a = b;
     
    b = 3;
    Pas une seule fois le type de l'objet String contenant "coucou" n'a chang�.
    Seule la valeur du pointeur b est diff�rente, et pointe maintenant vers un objet de type Int dont la valeur est 3. La valeur de a passe de nullptr � l'adresse de l'objet String contenant "coucou". Cette analogie est encore plus visible quand on parle d'objets prototyp�s, on a un beau new qui est totalement bien nomm� ^^.

    Pour ce qui est de l'operator+, Bovino est totalement dans le vrai, on peut faire exactement la m�me chose en C++ :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    string operator+(string s, int i)
    {
        return s + to_string(i);
    }

  15. #15
    Membre exp�riment�
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    200
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : B�nin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 200
    Par d�faut
    J'appr�cie beaucoup cet article. Il m'a permis de comprendre un peu mieux les notions de typage faible et fort, dynamique et statique; et je remarque aussi que les avis divergent sur la notion de typage et que cette notion n'est pas clairement d�finie.

    En poussant un peu loin ma r�flexion, je finis par me dire que le fait qu'un langage soit fortement ou faiblement typ� n'est pas un reproche qu'on devrait faire � un langage. Le fait qu'un langage soit typ� ou pas d�pend de l'usage qui en sera fait.

    JavaScript a �t� con�u dans l'id�e d'�tre un langage de script, et un script est un petit bout de code qui r�alise une petite t�che et dans lequel le type d'une variable (je veux que le type soit fix� une fois pour toute) n'a pas beaucoup d'importance. A l'�poque de sa cr�ation, je parie que les auteurs de JavaScript n'avaient pas pens� que le langage serait autant utilis� aujourd'hui.

    Les langages comme C++ et Java, vu leur vocation se doivent d'�tre fortement typ�s. Mais les langages de script, quant eux...

    Maintenant, je suis le premier � penser qu'il faudrait �voluer une version plus typ�s des langages JavaScript, PHP et Cie. On a d�j� Dart pour JavaScript (Merci(?) � Google).

    Et pour finir, qui a jamais reproch� � Batch (j'entends le langage de script shell GNU/Linux ou Windows) d'�tre faiblement typ�?

  16. #16
    Inactif  

    Homme Profil pro
    D�veloppeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 68
    Localisation : Canada

    Informations professionnelles :
    Activit� : D�veloppeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par d�faut
    Typ� ou pas, Javascript est une vraie plaie. Quand vous passez l'�quivalent de la moiti� d'une recharge de batterie de portable � niaiser devant une page Web illisible parce que la maudite s�rie de scripts n'est pas compl�tement ex�cut�e; c'est le signe d'un maillon faible. Que Javascript soit typ� ou non, c'est un d�bat inutile. Pour que le Web ait le moindrement d'allure, il faut une version compil�e de JavaScript au plus sacrant. Parce que maintenant, le Web est rendu aussi "performant" qu'il pouvait l'�tre � l'�poque du modem, m�me � 54000 bauds ou � peu pr�s, et de la ligne t�l�phonique. Tout le progr�s dans les vitesses de transmission est annihil� par la volont� des exploitants de sites Web d'avoir de beaux sites plus remplis de gugusses que celui du voisin. La beaut�, le style et le clinquant ont pris le dessus sur la productivit�. Et d�sol� d'avoir "cass� votre party".

  17. #17
    Membre tr�s actif
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    508
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 508
    Par d�faut
    Je fais actuellement une application de type intranet. Je peux vous dire que on peut tr�s facilement faire des applications de type Client lourds sur son navigateur avec du Javascript.

    Il y a des outils comme Typescript, Coffescript et Dart qui te permettent de jouer avec le Javascript tr�s facilement et d'avoir des typages lourds.

    Personnellement j'utilise Typescript pour avoir un typage fort et avoir un compilateur pour avoir une programmation simple et r�gul� (enfin au minimum, pas ouf non plus ...) . Car aujourd'hui on fait des types de programmations intelligente qui ont besoin d��tre fortement typ�.

    Car faire des v�rifications de donn�es � chaque fois sur une donn�e que je re�ois ou qui est susceptible d'avoir changer. Voil�, c'est pas trop ma grande passion.

    De toute fa�on, c'est pas possible de typ� un truc pareil. On risquerait de d�truire tout le web . On peut juste utilis� des alternatives si on aime le typage fort.

  18. #18
    Membre extr�mement actif

    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    2 408
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 2 408
    Par d�faut
    Citation Envoy� par clementmarcotte Voir le message
    ...
    totalement d'accord, je rajouterai m�me qu'un langage de script n'est pas fait pour faire des applications, comme son nom l'indique c'est pour faire du script.

    r�sultat de cette aberration, des fichiers js qui font plusieurs 100 de Ko, yui compress� ou pas, contenant des "v�ritables" applications, lentes et foireuses au possible. et tout cela rendant (bien sur, sinon �a serait trop facile) nul les am�liorations de performances des machines modernes ainsi que le d�bit des connexions internet.

    mais bon faut comprendre le monde du web, �a serait totalitaire de vouloir un second langage du adapt� au d�v lourd dans le standard web.

  19. #19
    R�dacteur
    Avatar de imikado
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    D�cembre 2006
    Messages
    5 239
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 5 239
    Billets dans le blog
    17
    Par d�faut
    Avec l'html5/css3/js on arrive � faire des applications de type SPA performante il me semble.
    Au hasard les applis de google: google docs
    Framework php s�curis� et simple � prendre en main avec g�n�rateur web http://mkframework.com/ (heberg� sur developpez.com)
    Mes cours/tutoriaux

  20. #20
    R�dacteur/Mod�rateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par d�faut
    Ah les bons vieux r�fractaires du Javascript.
    Qui voudraient qu'on balance du code compil� sans se soucier du fait que le Web est par nature universel et doit tourner sur une multitude d'environnements.
    Qui se plaignent des pauvres performances alors que celles des moteurs d'ex�cution JS ont �t� d�cupl�es ces derni�res ann�es.
    Qui estiment que les pages Web d'aujourd'hui sont trop lourdes alors que les technos de templating client et de stockage local ont �t� boost�es par le Web Mobile pour rendre les sites utilisables m�me en 2G.
    Qui proclament que le Javascript n'est pas adapt� aux applications lourdes, alors qu'aujourd'hui on peut en JS faire des moteurs 3D (Unreal Engine 3) des applications serveur (Node.js) qui font d�j� leur preuve et servent des millions de clients, et m�me des syst�mes d'exploitation (Firefox OS) !

    Je suis habitu� � ce genre de personnes, plusieurs de mes coll�gues sont comme �a. Et quand on leur montre une bonne application web, ils r�pondent tous "Mouais, c'est pas mal mais �a aurait �t� mieux fait en [ins�rer un langage natif discriminant 80% des utilisateurs ici]". Et ensuite ils prennent un air narquois et me montrent une webapp bien lourde et bugg�e, fait par des amateurs en un mois et surcharg�e depuis des ann�es par diverses rustines et bricolages douteux. Comme si l'incomp�tence �tait r�serv�e au Javascript

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