30

robinHood (./28) :
> pas mal de truc degeux du JS viennent du typage faible...

ça vient plutôt surtout du dev !
Le fameux adage « il n'y a pas de mauvais langage, que des mauvais dev… ». Un adage que je trouve bien étrange
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

31

./29 grin très très bonne !

les "faiblesses" ne sont pas obligatoires, loin de la, plutôt même réservées aux débutants, === existe et le test de type aussi ..
le js est un merveilleux langage, sont coté (full) asynchrone le rend unique et absolument awesome mais nécessite une très bonne rigueur smile
un mécano doit simplement connaître ses outils!
et la le mec il le pécho par le bras et il lui dit '

32

A vrai dire le fait meme qu’on faille faire des truc qu’un langage fortement type fait automatiquement (et l’existence meme de ==happy prouve que le langage n’est pas fiable à proprement parler.

Si je teste "0" == 0 et que le langage me dit « oui » ce n’est pas normal. Ce n’est pas parce que la chaîne peux être interprète comme le chiffre 0 que c’est le chiffre 0.


Quand a cette volonté de tout faire en asynchrone.... A part des maux de tète inutiles, et plein de complications pour rien...

Rappel; le coté asynchrone du JS est a la base dus a des limitation des navigateurs web qui travaillent en monothread, donc un JS qui ne s'arrête jamais == le navigateur bloqué, et rien d'autre.

L'asynchrone n'est vraiment de plus qu'un potentiel nid a problèmes et tends a rendre les choses largement plus complexes qu'elle ne devrait être dans la majorité des cas.

flanker (./30) :
robinHood (./28) :
> pas mal de truc degeux du JS viennent du typage faible...

ça vient plutôt surtout du dev !
Le fameux adage « il n'y a pas de mauvais langage, que des mauvais dev… ». Un adage que je trouve bien étrange
Yep comme "il n'y as pas de mauvais outils, que des mauvais cuisinier".
Certes un bon cuisinier ferra toujours avec ce qu'il a, mais si tu lui donne un mauvais couteau il va pas être super content, prendra plus de temps et potentiellement ratera la coupe de certaines pieces, pourtant il sait ce qu'il fait.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

33

j'en reviens donc à la connaissance des outils et donc aux mauvais dev
le vrai test est ===, ne pas lire la doc ne rend pas l'outil "mauvais" ou non "fiable"

(mais perso je serait d'accord pour supprimer "==" smile

> Quand a cette volonté de tout faire en asynchrone.... A part des maux de tète inutiles, et plein de complications pour rien...
pour rien ? mdr tu devrais le tester pour de vrai à l'occasion alors
edit > exemple de log de sortie d'un de mes soft, ça tape en // une multitude d'apis différentes, traite les données, les exportes et les sauves soit en local soit sur du distant, moins de deux minutes pour gérer l'ensemble (sans cache une des api met deux heures à être interrogé totalement, grâce à l'async toutes les autres sont dispo dans les deux minutes plutôt que les deux heures) et faire de l'up et du down au même moment ça rulez

autre délire node possède des pipes natifs avec de beau callbacks, lire un fichier de 4Gb le compresser et le sauver est possible en moins de 10 lignes sans bouffer ta mémoire et en laissant toute la réactivité à ton soft pour foutre autre chose, est ce possible ailleurs ?

> qui travaillent en monothread
ton programme taffe en mono thread, pas tout ce que tu lance en fond (pour bosser vraiment), tout fonctionne en event et callback, c'est ce qui rend les softs écrits avec si réactifs et justement non bloquant

> donc un JS qui ne s'arrête jamais == le navigateur bloqué, et rien d'autre.
=> mauvais dev

> L'asynchrone n'est vraiment de plus qu'un potentiel nid a problèmes et tends a rendre les choses largement plus complexes qu'elle ne devrait être dans la majorité des cas.
encore une fois, rigueur ! un débutant va forcément écrire du code super imbriqué ou spaghetti oui, mais une fois bien géré ça rulez
et la le mec il le pécho par le bras et il lui dit '

34

robinHood (./33) :
j'en reviens donc à la connaissance des outils et donc aux mauvais dev
le vrai test est ===, ne pas lire la doc ne rend pas l'outil "mauvais" ou non "fiable"

(mais perso je serait d'accord pour supprimer "==" smile
Avoir un truc comme "=="
- qui existe dans tous les langages,
- qui fonctionne presque tout le temps,
- qui ne fait pas la même chose que dans les autres langages,
- qu'il ne faut pas surtout pas utiliser en pratique,

ça correspond quand même pas mal à la définition d'un piège.

Idem avec {}, qui ressemble à une hashmap, qui fonctionne presque comme une hashmap, qui a la syntaxe d'une hashmap, mais qui n'est pas une hashmap, ça ressemble à nouveau pas mal à un piège…

J'ai du mal à trouver normal de devoir lire la doc pour éviter ce genre de piège.
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

35

(et sinon, pour faire la promo du JS, il y a "Mon langage est mieux que le tien". Ici, on parle de Python embarrassed)
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

36

C'est vrai grin
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

37

Oué c'est vrai ça, si ça continue de parler de JS ici, je m'y mets, na embarrassed

38

> Idem avec {}, qui ressemble à une hashmap, qui fonctionne presque comme une hashmap, qui a la syntaxe d'une hashmap, mais qui n'est pas une hashmap, ça ressemble à nouveau pas mal à un piège…

mais qu'est ce qu'une hashmap ? cheeky
jour un du js, l'objet, {}, comme les tests ==, === et typeof
je pourrais te retourner la chose et dire que les hashmap sont un piège grossier car c'est comme un objet !

regarde la démarche de folco à demander des tutos pour apprendre un nouveau langage, qu'il y ai des choses similaires est un fait mais tu ne peux pas prétendre vouloir faire comme ailleurs et tout retrouver de but en blanc sans un minimum d'efforts et de recherche

> J'ai du mal à trouver normal de devoir lire la doc pour éviter ce genre de piège.
pourtant avec php les tests c'est la même, c'est critiquable oui
l'objet lui, {}, n'est pas un piège par contre, c'est juste la base du langage, il n'y à pas 40 types non plus cheeky

> (et sinon, pour faire la promo du JS, il y a "Mon langage est mieux que le tien". Ici, on parle de Python embarrassed)
genre ça parle kernel / nostub juste dans le topic dédié :P mais j’arrête de digresser, ou on peut forker, mais de toute façon mon langage est mieux que le votre na ! chapo
et la le mec il le pécho par le bras et il lui dit '

39

Si seulement === était fiable.

Genre

typeof[] === typeof{}



Mais si seulement === etait le probleme : https://www.destroyallsoftware.com/talks/wat
(classique mais toujours aussi bon)


Edit: Cross et je n'en ajoute pas plus dans ce topic
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

40

digression :)
=== est fiable, il teste 'object' vs 'object', tu connais juste mal le langage, techniquement un array est un objet ... il possède juste quelques méthodes en sus

> typeof {}
'object'
> typeof []
'object'
> [] instanceof Object
true
> [] instanceof Array
true
> Array.isArray( [ 1, 2, 3 ] )
true
Array.isArray( { hello:"world" } )
false
> let a = [ 1,,,,,,,,42 ]
[ 1, <7 empty items>, 42 ]
> a["lol"] = "woot"
'woot'
> a
[ 1, <7 empty items>, 42, lol: 'woot' ]
> a[8]
42
> a[9]
undefined
> a["lol"]
'woot'
> a.lol
'woot'
> a.omg = "zzz"
'zzz'
> a
[ 1, <7 empty items>, 42, lol: 'woot', omg: 'zzz' ]
> a.length
9
> delete a.omg
true
> delete a.lol
true
> a.length
9
> a
[ 1, <7 empty items>, 42 ]
> a.printme = function(){ console.log("<<",this,">>"); return "trolol"; }
[Function]
> a.printme()
<< [ 1, <7 empty items>, 42, printme: [Function] ] >>
'trolol'
> a[ a.length ] = console.log.bind(null, "hello, world")
[Function: bound bound consoleCall]
> a.length
10
> a[ a.length - 1 ]()
hello, world
undefined
> a[ a.length - 1 ]( "omg", "wtf", "♥" )
hello, world omg wtf ♥
undefined
> let o = { lol:"woot" }
{ lol: 'woot' }
> o.lol
'woot'
> o["lol"]
'woot'
> let p = "lol"; o[ p ]
'woot'

ça doit vous rayer les yeux mais la liberté ça poutre et n’empêche nullement de rester clean

ton lien est certes rigolo pour la photo de l'accident puis le watman mais n'est pas un argumentaire quant au langage lui même, j'ai battis des cathédrales avec, il est fiable puissant rapide .. mon serveur est matériellement tombé avant mes scripts ..

et la le mec il le pécho par le bras et il lui dit '

41

Folco (./10) :
Là je viens de lire un truc qui me trouducute quand même un peu :
L'exécution d'une fonction introduit une nouvelle table de symboles utilisée par les variables locales de la fonction. Plus précisément, toutes les affectations de variables effectuées au sein d'une fonction stockent la valeur dans la table de symboles locale ; en revanche, les références de variables sont recherchées dans la table de symboles locale, puis dans la table de symboles locale des fonctions englobantes, puis dans la table de symboles globale et finalement dans la table de noms des primitives
Ca veut dire... qu'une variable X dans une fonction masquera la variable X de la fonction appelante, mais que la variable X de la fonction appelante sera visible si elle n'est pas redéfinie dans la fonction appelée ??
C'est moi ou c'est casse-cou, error-prone, et contre toute notion de privatisation et de protection de données en général (encapsulation par exemple) ?

Sauce : https://docs.python.org/fr/3.8/tutorial/controlflow.html#defining-functions

edit -> ah ben non :
>>> def func1():
...  x = 1
...  func2()
...
>>> def func2() :
...  print(x + 1)
...
>>> func1()
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in func1
  File "<stdin>", line 2, in func2
NameError: name 'x' is not defined
Bon ben je raconte que de la mayrde et j'ai rien compris à leur formulation cry Mais au moins, ça me parait plus naturel grin

Bon pour du déterrage, c'est du déterrage, mais je pense que l'on a vu pire trioui. Pour mon premier post depuis ... 10 ans ? c'est une belle performance tricol !

Et puis j'ai vu qu'en décembre 2022 Folco posait encore des questions Python, donc je me dis que ça peut servir.
Je suis en train de lire "Python Basics" de "Real Python", et je viens de tomber sur l'exact même chose, qui confirme ce qui te trouducute Folco : Python va bien chercher d'abord dans le scope local, puis Enclosing, puis Global et enfin Built-in (le fameux LEGB).
Si dans ton test ça merde, c'est que x est défini dans le scope local de func1() et ne sera jamais visible dans le scope local de func2().

J'avoue que c'est plutôt casse gueule... Je pense que c'est pour cela que Flanker recommande de ne pas utiliser de variables dans le scope global (en plus de simplifier la création des tests unitaires ?).
Et comme tu le signales dans le post suivant, cela me fait bizarre de ne pas déclarer le type de mes variables. En VBA je le fais systématiquement, ça limite beaucoup les erreurs bêtes... Ici aussi Flanker semble indiquer que Pycharm (et d'autres) peuvent aider avec des truc du type ma_func(mon_arg : str) -> str: Je ne connaissais pas, il va falloir que je creuse ce point.
...

42

Pour ce dernier point, il s'agit de type hinting et ce n'est pas propre à PyCharm car c'est une norme Python. En revanche, PyCharm sait deviner le type des variables dans la majorité des cas sans indication. Cela reste une bonne pratique de la mettre, toutefois.
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

43

flanker (./42) :
Pour ce dernier point, il s'agit de type hinting .

Merci bien Flanker pour ce complément d'information !

J'ai la curieuse impression de me sentir tout nu quand je ne déclare pas le type de mes variables. (Oui, c'est bizarre, mais c'est comme ça).
Lorsque je m'en suis rendu compte, je me suis sérieusement posé la question de continuer le Python ou de changer... Comme j'avais entendu mes cousins informaticiens en dire beaucoup de bien, j'ai résolu de persévérer...
...