WAT - ruby and javascript
2 060 vues
Précédent
Touche Q ou GAUCHE pour passer au fichier précédent
14 commentaires
Tri par popularité
Tri chronologique
Suivant
Touche D ou DROITE pour passer au fichier suivant
36
BarneyGumbles Lombric Shaolin
Zap Vermisseau
i = float("9e999")
s = [str(-i+i).capitalize()]*9
print("%s Batman!" % ''.join(s))
Tronix117 Vermisseau
En Javascript :
• le `+` a trois utilités : si les deux termes sont des nombres, alors il les additionne, si les deux termes ne sont pas des nombre il sert à concaténer (rassembler) deux chaines de caractères. Dans les autres cas il permet de convertir le terme qu'il précède en Nombre.
• Un Objet converti en String sans méthode `toString` défini manuellement renverra `"[object Object]"`.
• Quand un tableau `[ ]` est converti en chaine de caractère, chacun de ces éléments sera séparé par une `,` ainsi `[1, 'abc', ''].toString()` donnera `"1,abc,"`. Pour rappel, un Array est un Objet un peu particulier, et qui défini la méthode `toString` d'une façon similaire à : `Array.prototype.toString = function () { this.join(",") }`
• Si une ligne commence par `{` alors c'est considéré comme étant un block (non un objet) qui se termine au prochain `}`
• Converti au même type (typecasted) : 0, "", false, undefined, null sont égaux
En partant de là :
• `[] + []` => "" – (chaine vide) car comme les deux termes ne sont pas des nombres, le PLUS essaie de convertir les deux termes en String, et un Array vide converti en string donne une string vide. On se retrouve donc avec `"" + ""` et la concaténation de deux String vide donne bien une String vide cad `""`
• `[] + {}` => "[object Object]" – Même réflection : `"" + "[object Object]"` donne bien `"[object Object]`
• `{} + []` => 0 – Ici la ligne commence par un block qui ne fait rien et se termine immédiatement, donc `{}` est ignoré, ce qui nous laisse `+[]`, ici le plus précède un terme qui n'est pas un nombre, il essai donc de le convertir en nombre, sauf qu'on ne peut généralement convertir q'une String en nombre. Il est donc déjà converti en String `""`, puis une String vide typecasted est égale à 0, donc la conversion d'un tableau vide en nombre donne 0.
• `{} + {}` => NaN – Même chose ici, cela donne `+{}` et essai de convertir un objet en nombre, ce qui équivaut à le convertir d'abord en String `+"[object Object]"` puis en nombre, sauf que cette String ne contient pas de nombre, donc => Not-A-Number aka `NaN`
• Array(16) => ,,,,,,,,,,, – Son interpréteur converti en String tout ce qui lui est passé avant de l'afficher, ainsi comme vu plus haut, un tableau vide de 16 élément, retourne bien 15 virgules.
• Array(16).join("wat") => watwatwat... – Totalement normal
• Array(16).join("wat" + 1) => wat1wat1wa... – Totalement normal, un des termes autour du plus est une string, le deuxième sera donc converti en string avant d'être concatén
• Array(16).join("wat" - 1) => NaNNaNNa.... – Le `-` ne fonctionne qu'avec des nombre, il essaie donc de convertir les deux termes en Nombre, comme "wat" n'est pas un nombre, c'est donc converti en `NaN` et `NaN - 1` c'est aussi `NaN`.
glurp En réponse à Tronix117 LoMBriK addict !
J'avais envie de hurler durant toute la vidéo, clairement le gars n'aime pas Javascript et ne connait pas Javascript.
Tronix117 En réponse à glurp Vermisseau
---
(c'est chiant la limite de 25 lignes pour un commentaire).
Pour Ruby :
* Lorsqu'une variable est assignée elle est implicitement assignée à `nil` en tout premier lieu.
Ainsi lorsqu'on fait `a = b`, alors ruby fait :
`a = nil; a = b`, sauf que b n'existe pas donc : erreur
Par contre pour `a =a` :
`a = nil; a = a`, cela fonctionne car a est initialisé avec une valeur `nil`, donc au final `a => nil`
Pour le méthode missing, c'est simplement que le premier membre de la phrase est considéré comme un appel de fonction, et le reste sont des paramètres. En Ruby, un truc top c'est de pouvoir surcharger ce qu'il se passe quand une fonction n'existe pas, et c'est ce qu'on fait ici, on dit simplement d'écrire tous les arguments quand on appelle une fonction qui n'existe pas. Fun mais pas exceptionnel, et à ne jamais utiliser de cette façon.
Je crois que j'ai tout couvert ;)
AthranZara En réponse à Tronix117 Vermisseau
Tronix117 En réponse à AthranZara Vermisseau
Maurice En réponse à Tronix117 Suce pour un titre
AthranZara En réponse à Tronix117 Vermisseau
Je connais les raisons de 1 + "1" != "1" + 1 mais ca n'empeche que c'est quand meme chiant
Tronix117 En réponse à AthranZara Vermisseau
AthranZara En réponse à Tronix117 Vermisseau
Mais bon, pour être honnete je suis dev Java et ce débat on l'a au taff avec les devs Front qui font du tres bon boulot en JS & TS, meme si c'est pas grace a ces "avantages" que le JS revient sur le devant de la scène amha, mais plutôt grace a son comportement simili asynchrone.
Tronix117 En réponse à AthranZara Vermisseau
D'ailleurs Kotlin me donnerait "presque" envie de refaire du Java :)
Le pseudo asynchrone de Javascript, est simplement fait de la même façon que dans beaucoup de programme non javascript (`while(1)`). Sauf que l'Event Loop est la base de la techno, et donc transparente. Le vrai asynchrone n'existe pas vraiment, même avec les system interupts de toute façon.
Nap Vermisseau
Frankfurt Lombric Shaolin
null == 0 (false)
null < 0 (false)
null < = 0 (true) (sans l'espace entre < et =)
https://stackov...-but-not-null-0