2850

J'avoue que ma question n'est pas franchement évidente, étant donné un point de vue très personnel.
Si je devais la formuler autrement : connaissant très bien PHP, ai-je des intérêts particulier à m'investir (en temps et en ressources) à apprendre un autre langage de scripts, dans le cadre d'une utilisation ponctuelle et non-professionnelle ?
avatar
« Nous avons propagé sur Extranet une histoire fabriquée de toutes pièces selon laquelle une certaine disposition d'étoiles, vue depuis la planète d'origine des butariens, formaient le visage d'une déesse galarienne.
Sans chercher à vérifier ces informations, certains ont décrété que c'était la preuve de l'existence de la déesse. Ceux qui notaient le manque de preuves se faisaient attaquer. »

Legion, geth trolleur à portée galactique

2851

Vince: non sa question est plutôt vague "Quels avantages peut-on trouver dans d'autres langages de scripts comme Perl ou Python pour des utilisations simples comme je fais" ma réponse me semble correcte. Je répond dans l'absolu par dans son cas particulier. Il ne dit pas "Quelle serait MON avantage a utiliser un autre langage tel que"

Meow; pour ton cas personnel, dur a dire, connaissant PHP et Python (et quelques autres langages de script) je prefere Python, PHP n'est pour moi pas adapte a la CLI, les libs sont bien trop orienté web, et PHP n'a pas de base un CPAN a la perl ou un PIP/easy_install a la Python.

A vrai dire je dirais dans tous les cas de fuir Perl (et Ruby) question langage de script oriente CLI, perl ne devrait exister que pour maintenir le bordel déjà existant, et pas pour en créer du nouveau.

Mon seul problème avec PHP est vraiment son orientation très web.

Mais je vais être honnête, j'ai déjà utilise PHP en CLI pour faire des retouches d'images basiques parce que j'avais deja du code utilisé sur un site web, et flemme de regarder comment faire la même chose avec du Python, mais je reste quand même très réticent a utiliser PHP pour faire autre chose.

Mais si tu connais bien PHP et pas l'envie d'apprendre un nouveau langage (ce qui est plus que compréhensible) et que PHP te conviens pour les quelques trucs que tu as a faire, la réponse est: "pourquoi se faire chier?" ?

Si tu compte faire des trucs plus sérieux la je te dirais, oui c'est probablement mieux d'utiliser un autre langage que PHP pour de la ligne de commande. Si c'est pour des oneshot, te fait pas chier.
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.

2852

Ceci dit, ça peut être intéressant d'apprendre Python même si tu n'en as pas réellement besoin pour ton utilisation immédiate, ne serait-ce que pour pouvoir l'ajouter à ta liste de compétences pros (ça peut toujours servir), et pour voir une façon différente de programmer (savoir ce qui se fait ailleurs peut permettre de se dire "ah, tel truc c'est génial pour résoudre tel type de problème" - même si tu ne changes pas de langage au final et que la feature n'existe pas en PHP, ça peut donner des idées de solutions).

Attention, si on en croit Flan, une fois que tu auras goûté au Python tu ne supporteras plus le PHP tongue
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

2853

et en python tu peux faire un script pour plpt(ôt)p grin
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

2854

Zerosquare (./2852) :
Attention, si on en croit Flan, une fois que tu auras goûté au Python tu ne supporteras plus le PHP tongue
Oh mais j'ai confiance, ce n'est pas parce qu'une chose est plus simple d'utilisation, ou d'apparence plus élégante, qu'elle en devient plus séduisante smile
Sinon j'enregistrerai mes mots de passe, j'utiliserai OK Google, j'enregistrerai mes informations bancaires sur tous les sites marchands que j'utilise...
avatar
« Nous avons propagé sur Extranet une histoire fabriquée de toutes pièces selon laquelle une certaine disposition d'étoiles, vue depuis la planète d'origine des butariens, formaient le visage d'une déesse galarienne.
Sans chercher à vérifier ces informations, certains ont décrété que c'était la preuve de l'existence de la déesse. Ceux qui notaient le manque de preuves se faisaient attaquer. »

Legion, geth trolleur à portée galactique

2855

Sincèrement, Meow, je fais comme toi et ça me convient tout à fait ^^
PHP sait faire pas mal de choses autre que le web (même si c'est son usage principal). Il y a même une librairie Tcl/Tk si tu veux faire des scripts en GUI ^^ (mais je ne me suis jamais embêté à le faire grin)
avatar

2856

Si tu partais de zéro ça serait peut-être intéressant de choisir Python pour plusieurs raisons assez mineures :

- C'est un langage qui a un historique moins lourd, c'est à dire dans lequel tu te dirais "il y a 5 façons équivalentes de résoudre le même problème" moins souvent
- Il a évolué de façon moins chaotique, donc avec moins d'incongruités que PHP (mais comme tu es habitué à PHP ça n'est probablement pas un problème pour toi)
- J'ai l'impression qu'il y a beaucoup plus de bibliothèques disponibles (et comme déjà dit, globalement plus de choses destinées à des usages non-web)
- La syntaxe est très souvent plus concise, donc pour faire du quick & dirty ça te prendra souvent moins de lignes de code pour écrire la même chose ; une fois habitué ça reste un petit gain de temps, même si négligeable

Mais j'ai l'impression que ces points s'envolent complètement dans ta situation où tu connais déjà PHP, et qu'aucun ne peut être une motivation suffisante pour apprendre un nouveau langage... à part si tu en as envie par curiosité peut-être.

[edit] Après avoir écrit ce message je pense à deux choses peut-être moins anecdotiques :

- Il manque certains concepts en PHP, globalement tout ce qui tourne autour du fait d'avoir une application persistante et non un script qui s'exécute et s'arrête : pas de threads, pas d'asynchronisme, pas de mémoire partagée, pas de mémoire qui survive au-delà d'une seule exécution ; ça limite pas mal les domaines d'application
- Je n'ai jamais fait (ni cherché) de bench contre PHP 7 mais j'imagine que Python conserve une certaine avance en performance d'exécution. Après les deux restent des langages dynamiques donc si la performance est un critère pour toi alors ce sont probablement tous les deux des mauvais choix de toutes façons.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2857

https://benchmarksgame.alioth.debian.org/u64q/php.html
Dans des benchs (il faudrait tester des trucs plus courant aussi), PHP7 est bien plus performant que python 3 en tout cas.

2858

Zeph (./2841) :
Pour les usages "page web" la bibliothèque telle que définie par le w3c est déjà pas mal. Tu citais par exemple jQuery, normalement il n'y a plus besoin de s'en servir depuis que document.querySelector est disponible partout (d'ailleurs c'est en partie pour ça que la lib est en train de mourir doucement).
Il n'y a pas que ça dans jQuery, quand même ^^ (même si c'est bien sûr le principal usage)

flanker (./2839) :
Et voilà, on retrouve une habitude de JS : ça ressemble à une table de hash, ça a le goût d'une table de hash, ça a l'odeur d'une table de hash, mais ce n'est pas une table de hash.
Mais justement : à aucun moment on ne t'a prétendu qu'il s'agissait de près ou de loin d'une table de hash, c'est simplement toi qui a tiré cette conclusion à partir de ta connaissance d'autres langages.
Je ne suis doublement pas d'accord :
- tout d'abord je trouve que c'est une très (très très) mauvaise idée de prendre une syntaxe qui est utilisée par beaucoup d'autres langages pour faire toute autre chose : la confusion était très largement prévisible ;
- ça ressemble quand même beaucoup à une table de hash, avec les méthodes keys(), values(), … il suffit de voir le nombre de sujets sur StackOverflow avec l'utilisation de {} comme réponse quand le demandeur cherche une hash table… D'ailleurs, je cite Mozilla : « Les objets sont similaires aux Maps, chacun manipulant des clés associées à des valeurs, récupérant ces valeurs, supprimant des clés... Il n'y avait auparavant pas d'alternatives natives et c'est pourquoi, historiquement, les objets JavaScript ont été utilisés comme des Maps », ou encore « Dans la plupart des scénarios, les objets restent une solution valide. »
Donc dire que {} n'a aucun rapport, même de loin, avec une hash table me semble un tantinet exagéré cheeky

Je peux te donner quelques exemples, mais avant il me semble plus important de répéter mon argument précédent : au lieu d'essayer de résoudre un problème, on essaie de reproduire un moyen. Plutôt que de trouver comment implémenter ce que je veux en utilisant l'héritage prototypal on essaie de l'implémenter avec des classes, mais comme ça n'existe(ait) pas en JS on se retrouve à implémenter un machin hybride qui fait presque comme des classes mais en utilisant les prototypes de JS. Je pense que l'approche "je veux implémenter de cette façon parce que c'est comme ça que je l'aurais fait dans le langage que je connais" n'est pas efficace. Du coup prendre un cas d'école de l'utilisation des classes et essayer de l'écrire en JS est idiot : bien sûr que ça sera moche, mais quel problème essaie-t-on de résoudre ? J'imagine que la réponse n'est pas "je veux une classe Client qui hérite de Person" mais quelque chose d'un peu plus concret, qui peut très certainement s'écrire de 1001 autres façons. C'est pas comme si le C était à court de solutions pour implémenter tout et n'importe quoi, et pourtant il n'y a ni classes ni prototypes.
Je ne suis pas d'accord. Simplement, je ne veux pas modifier les prototypes de base (cf. plus bas), donc je me retrouve à faire l'équivalent d'une classe (un nouvel objet que je vais peupler de propriétés).
Plein d'enthousiasme, j'ai cherché quelques tutos (c'était a long long time ago, donc ça a peut-être évolué depuis), et ils disaient tous la même chose : l'héritage par prototype, c'est fantastique, regardez comme on peut réimplémenter un système de classe facilement \o/


À l'inverse je peux trouver des cas d'utilisation qui sont favorables à l'héritage par prototype. Mettons par exemple que j'écrive un programme dans lequel j'ai fréquemment besoin d'obtenir l'opposé de chaque élément d'un tableau, je pourrais avoir envie d'une fonction "negate" disponible facilement (bouh, elle n'est pas disponible de base, quelle bibliothèque standard ridicule !). Une solution simple à ça serait de l'ajouter directement sur l'objet Array
Pour le coup, j'aurais surtout tendance à partir en courant !
Que se passe-t-il si une lib externe a aussi envie d'une fonction negate, mais avec un résultat différent pour null ou undefined ? La solution idéale pour avoir des bugs subtils et totalement incompréhensibles couic
C'est viable quand on bosse sans aucune lib externe, mais sinon, je trouve ça beaucoup trop dangereux.
L'autre argument concerne les garanties sur le code. Les types permet des garanties fortes sur le code. À partir du moment où tu modifies les propriétés de chaque type, le problème me semble beaucoup compliqué.
Ça se voit d'ailleurs très bien dans les IDE : l'analyse statique sur le JS est très très loin derrière celle du Python (pour deux langages que j'utilise un peu), malgré ma bonne volonté pour lui donner toutes les indications dont il a besoin tout en ayant un code structurellement plus simple.

Qu'on puisse changer les objets de base ne me choque pas pour des choses très précises (pour un débuggueur, par exemple), mais surtout pas pour du code classique.

Plus généralement je viens d'étendre la bibliothèque standard, ce qui est une fonctionnalité que pas mal de langages ont essayé de proposer (C# avec les méthodes d'extension, Python avec la méthode magique "__init__" au lieu de constructeurs, etc.).
Qu'est-ce que la méthode __init__ a de magique ? C'est un constructeur comme un autre, non ? Mais je ne vois pas trop en quoi elle étend la bibliothèque standard (je ne connais pas C#, donc je n'en dirais rien).
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

2859

./2857 : Wow, alors là j'aurais parié dessus grin

Bon les programmes ne sont pas vraiment équivalents, la version PHP est entièrement impérative tandis que la version Python est plus fonctionnelle avec des générateurs de partout, c'est pas une comparaison très honnête. Mais la différence reste surprenante !

./2858 : bon je ne réponds pas à tout parce que flemme :

flanker (./2858) :
- ça ressemble quand même beaucoup à une table de hash, avec les méthodes keys(), values()
Heu... tu sors ça d'où ? Ça ne marche pas dans mon browser et ça n'apparaît pas non plus dans la spécification ? (et pas plus dans celle de Mozilla, que je suis allé voir au cas où)

flanker (./2858) :
Donc dire que {} n'a aucun rapport, même de loin, avec une hash table me semble un tantinet exagéré cheeky
Si jamais pour toi "utiliser les caractères { et } en commun" est un critère alors d'accord, mais pour moi non ça n'est pas exagéré, je pense réellement que le concept n'a rien en commun (pour des raisons déjà expliquées plus haut donc on tourne un peu en rond)

flanker (./2858) :
C'est viable quand on bosse sans aucune lib externe, mais sinon, je trouve ça beaucoup trop dangereux.
Bah oui bien sûr, là encore c'est le postulat de départ : le JS a été conçu pour être exécuté dans un environnement isolé. Je ne conteste pas le fait qu'on le pousse trop loin en essayant de l'utiliser comme technologie côté serveur et lui faire faire des choses qui n'ont pas été prévues au moment de sa conception. Je dis simplement que replacé dans son contexte c'est un langage qui beaucoup de choix intéressants.

flanker (./2858) :
Qu'est-ce que la méthode __init__ a de magique ? C'est un constructeur comme un autre, non ?
Pas du tout non, c'est une méthode d'initialisation. La différence réside, entre autres, dans le fait qu'il s'agit d'une méthode tout à fait classique qui suit l'arbre d'héritage des objets. Ça veut dire que si j'ai une classe AbstractMachin qui expose une méthode def __init__(self, x, y) et que j'en fais hériter un ConcreteMachin qui ne redéfinit rien du tout, alors je peux quand même faire machin = ConcreteMachin(3, 5) et ça appelle ma fonction d'initialisation correctement. C'est utilisé dans pas mal d'endroits de la lib standard pour fournir des classes volontairement incomplètes qu'il faut étendre pour pouvoir s'en servir, mais qui ont quand même besoin d'arguments pour être initialisées. Ça fonctionne, mais je trouve qu'avoir troqué les constructeurs pour cette fonctionnalité est trompeur : si je redéfinis une méthode __init__ moi-même et que j'oublie d'appeler celle de mon parent par exemple (parce que j'ignorais qu'elle existait, ou tout simplement parce que je me suis planté) alors je vais me retrouver avec un code qui s'exécute correctement mais va planter ou faire n'importe quoi à l'exécution.

Tiens d'ailleurs, c'est très dommage d'avoir choisi une syntaxe qui fait aussi furieusement penser à celle d'un constructeur pour quelque chose qui n'en est pas un (et visiblement beaucoup de gens font la confusion, toi compris, alors que tu n'es pas vraiment un débutant dans ce langage il me semble). Toi qui râlais parce que les objets de JS utilisent une syntaxe proche de celle des hashmaps dans d'autres langages, ça doit te sembler atroce non ? grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2860

Zeph (./2859) :

Heu... tu sors ça d'où ? Ça ne marche pas dans mon browser et ça n'apparaît pas non plus dans la spécification ? (et pas plus dans celle de Mozilla, que je suis allé voir au cas où)
pourtant : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys et https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values (en effet, c'est expérimental, je n'avais pas vu)


flanker (./2858) :
Donc dire que {} n'a aucun rapport, même de loin, avec une hash table me semble un tantinet exagéré cheeky
Si jamais pour toi "utiliser les caractères { et } en commun" est un critère alors d'accord, mais pour moi non ça n'est pas exagéré, je pense réellement que le concept n'a rien en commun (pour des raisons déjà expliquées plus haut donc on tourne un peu en rond)
Bah il y a quand même la syntaxe toto["ma_clef"] et toto["ma_clef"] = "ma_valeur", qui fait aussi furieusement penser aux HashMap de beaucoup de langages grin La doc officielle de Mozilla dit également que «[...] les objets JavaScript ont été utilisés comme des Maps », ou encore « Dans la plupart des scénarios, les objets restent une solution valide [pour une HashMap] ». Mais bon, à la base, ce n'était qu'un exemple d'un mauvais aspect de JS, qui pousse à l'erreur. Bien sûr, si on maîtrise la doc *officielle* et qu'on ne fait pas confiance à StackOverflow (au hasard), on ne tombera pas dans les pièges comme celui-ci.

flanker (./2858) :
C'est viable quand on bosse sans aucune lib externe, mais sinon, je trouve ça beaucoup trop dangereux.
Bah oui bien sûr, là encore c'est le postulat de départ : le JS a été conçu pour être exécuté dans un environnement isolé. Je ne conteste pas le fait qu'on le pousse trop loin en essayant de l'utiliser comme technologie côté serveur et lui faire faire des choses qui n'ont pas été prévues au moment de sa conception. Je dis simplement que replacé dans son contexte c'est un langage qui beaucoup de choix intéressants.
Même côté client. J'ai déjà eu des bugs très rigolos (malgré ma faible expérience JS), où justement l'inclusion d'une lib tierce-partie a flingué mon code parce qu'il ajoutait des méthodes à des objets de base.
Pourtant, on était bien dans le cas d'usage du JS ^^


Pas du tout non, c'est une méthode d'initialisation. [...]
Ok, je n'avais pas la bonne définition de constructeur en tête. je connais la différence de comportement suivant les langages que j'utilise, mais pour le coup le comportement ne m'a pas spécialement choqué, il est simplement différent (ni meilleur, ni moins bon). Je n'avais jamais fait gaffe que la doc ne parlait jamais de constructeur mais seulement d'__init__.
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

2861

Arvi89 (./2857) :
https://benchmarksgame.alioth.debian.org/u64q/php.html
Dans des benchs (il faudrait tester des trucs plus courant aussi), PHP7 est bien plus performant que python 3 en tout cas.
Je ne sais pas ce que valent les tests de façon générale, j'ai regardé uniquement le n-body, dans lequel j'ai fait un petit changement :

def combinations(l):
    result = []
    for x in range(len(l) - 1):
        ls = l[x+1:]
        for y in ls:
            result.append((l[x],y))
    return result
remplacé par
def combinations(l):
    for i, x in enumerate(l):
        for y in l[i+1:]:
            yield (x, y)
Je suis passé de 220s à 30s*, puis à 28s en utilisant "itertools.combinations" qui est fournie de base grin (bon, le gain de perf est sûrement de l'erreur de mesure)


* dans les deux cas, avec seulement 5000000 itérations vu que j'ai une petite machine.
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

2862

Zeph (./2856) :
- Il manque certains concepts en PHP, globalement tout ce qui tourne autour du fait d'avoir une application persistante et non un script qui s'exécute et s'arrête : pas de threads, pas d'asynchronisme, pas de mémoire partagée, pas de mémoire qui survive au-delà d'une seule exécution ; ça limite pas mal les domaines d'application
Ca, c'est clair que dès qu'on veut faire des applications avec des traitements asynchrones, c'est la merde (et je le sens bien avec le projet que je gère, je suis obligé de passer par des fichiers de lock et d'échanges de données, c'est extrêmement gourmand en temps, sans certitude sur le fait que le script n'a pas planté au milieu (impossibilité de faire la différence entre un traitement long et un traitement planté). C'est une vraie plaie.

Zeph (./2856) :
- Je n'ai jamais fait (ni cherché) de bench contre PHP 7 mais j'imagine que Python conserve une certaine avance en performance d'exécution. Après les deux restent des langages dynamiques donc si la performance est un critère pour toi alors ce sont probablement tous les deux des mauvais choix de toutes façons.
PHP 7 a radicalement boosté les performances, c'est assez impressionnant oui un même script qui tourne en PHP5 en une grosse demi-heure est tombé sous les 20 minutes (j'utilise PHP comme ETL).
avatar

2863

Et aussi, si on regarde l'"erreur" de pidigits, on voit que l'auteur du bench n'a même pas fait l'effort d'installer le module Python que le code choisi utilise. roll mur

Bref, ce bench ne vaut rien.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

2864

Pour le Python, dans *certains cas*, on peut avoir de très bonnes perfs. Par exemple on peut faire du Python en calcul matriciel et avoir ds perfs comparables au C.
Pas de magie dans tout ça : on ne fait que manipuler des objets Python qui encapsulent le code C, et 99% des opérations sont faites sans quitter le « monde C » (en évitant les A/R C <-> Python).

Quand on a besoin de perfs, tout le jeu est de trouver la bonne lib qui va permettre d'utiliser du code C de façon transparente, mais ce n'est pas toujours faisable bien évidemment.
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

2865

flanker (./2864) :
Quand on a besoin de perfs, tout le jeu est de trouver la bonne lib qui va permettre d'utiliser du code C assembleur de façon transparente, mais ce n'est pas toujours faisable bien évidemment.
Fixed For Folco embarrassed

Sinon pour en revenir à PHP :
Zeph (./2856) :
pas de threads, pas d'asynchronisme, pas de mémoire partagée, pas de mémoire qui survive au-delà d'une seule exécution
Je ne savais pas que tout ça n'existait pas en PHP, je pensais naïvement que ç'avait été rajouté au fil du temps, comme pour la plupart des autres langages. Rien que pour ça, je recommanderais à Meowcate d'essayer le Python (ou un autre langage dans lequel ces features existent), parce que ce sont des concepts utiles et devenus difficiles à contourner.
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

2866

pour moi avec ces trucs, les perfs on s'en fout. par contre les libs de python sont sympas et le langage est moins bordélique.

2867

squalyl (./2866) :
pour moi avec ces trucs, les perfs on s'en fout. par contre les libs de python sont sympas et le langage est moins bordélique.
bin ça dépend, justement ^^
quand tu dois optimiser sur les deux critères en même temps (temps humain et temps processeur), t'es bien content que ton code qui fait deux lignes soit en plus rapide ^^
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

2868

Un joli bug Python (enfin c'est sujet à débat, mais pour moi c'est clairement un bug) posté par un pote :

Dommage que quelqu'un ait posté la réponse, si vous êtes joueur vous pouvez essayer de trouver sans la regarder ^^
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2869

Clairement pas un bug, mais après les histoires de scope ne plaisent jamais à tout le monde et sont discutables smile
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

2870

Oui la version de gauche est ce qu'on attends, le probleme viens de du cote readonly ou non des variable, celle de droite ne changeant pas le contenue de c a proprement parler ne genere pas l'erreur.

Oui c'est discutable
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.

2871

Exactement smile
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

2872

Bah quand c = c + 1 génère une erreur "variable c non assignée" alors que x = c + 1 passe sans problème en capturant correctement c, je trouve qu'on peut difficilement prétendre qu'il n'y a pas un souci grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2873

Quelqu'un peut-il expliquer pour ceux qui ne connaissent rien au Python SVP ? cheeky
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

2874

Je suppose que c'est juste la portée, le c du c+=1 de la fonction locale est un nouveau c, donc c = c + 1 échoue (le c de c+1 est aussi la lvalue locale)
D'où l'histoire du nonlocal à ajouter probablement pas loin de c+=1 évoquée dans les commentaires.

En java par exemple la variable c de portée plus large aurait dû être obligatoirement définie comme étant final pour éviter ce genre de surprise. Une bien belle machine #modui#

2875

Visiblement, l'expression c += 1 donne c = c + 1 (jusque là tout va bien), ce que l’interpréteur semble comprendre comme "la variable c est créée dans cette fonction". Le fait que c soit aussi présente dans la partie de droite passe à la trappe, donc la variable n'est pas capturée dans la closure et ça explose au runtime.

Je ne suis pas certain que ce soit ça, mais si ça l'est alors ça me semble être clairement un bug.

[edit] en tout cas c'est pas en JS qu'on aurait eu un bug pareil embarrassed

avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2876

Pen^2 (./2874) :
En java par exemple la variable c de portée plus large aurait dû être obligatoirement définie comme étant final pour éviter ce genre de surprise. Une bien belle machine #modui#
Ce n'est plus le cas en Java 8, il suffit maintenant que la variable soit effectivement finale, il n'est plus nécessaire de la déclarer comme telle.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

2877

(tu fais du Java maintenant, toi ?)

Pen² & Zeph > merci happy
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

2878

(oui, il l'a déja dit, faut suivre embarrassed)

2879

(Kevin > ah, tiens, oui cheeky)

2880

Google a enfin décidé de supporter officiellement un langage moderne sur Android pour pallier aux insuffisances (et autres problèmes juridiques) de Java : Kotlin
Petit comparatif rapide par rapport à Swift : http://nilhcem.com/swift-is-like-kotlin/

Fun fact : Kotlin est développé par des russes, c'est le nom d'une île qui a servi de base militaire, et ça fait déjà polémique auprès de certains développeurs ukrainiens.
So much code to write, so little time.