J'ai du mal à voir C++ et expressivité dans la même phrase, et Python dans la catégorie "inexpressivité". Pour le reste du commentaire, je suis plutôt d'accord.
J'exprime mon désaccord sur les deux points:
Python est au contraire un langage très expressif, le programmeur peut manifester son intention en très peu de lignes de code. Le boiler-plate code en Python est quasiment inexistant.
A l'opposé, à chaque fois que j'utilise la STL en C++, mes yeux pleurent, je me dis que 120 colonnes pour une ligne, c'est bien peu quand tu veux manipuler une structure un tant soit peu élaborée.
Allez, au hasard, parcourons une map/un dict de string vers des paires de string en Python et en C++ et inversons les paires:
En Python:
# on parcours le dictionnaire, k est la clé, v est la valeurfork,vind.items():# v est une paire, on peut accéder aux deux éléments et les inverserd[k]=(v[1],v[0])
En C++:
// on parcours le dictionnaire/map avec un iterateur, it.first est la clé, it.value est la valeurfor(map<string,pair<string,string>>::iteratorit=d.begin();it!=it.end();it++){// la paire est dans it.second, c'est elle qu'il faut inverserd[it.first]=make_pair(it.second.second,it.second.first);}
En terme d'expressivité et lisibilité, je trouve que la version Python s'en sort beaucoup beaucoup mieux.
Et encore, il aurait été de bon ton d'expliciter l'instanciation de make_pair<> .
Alors, certes, en C++11, on peut faire plus compact en utilisant des auto et surement avec d'autres trucs (lambda ? foreach ?). Mais tout le monde ne les connait pas.
On peut aussi faire bien plus compact en Python mais on tombe sur le même problème: la syntaxe des Python compréhensions est peu connue (par exemple, aucun de mes collègues de travail ne connait): d = { k:(v[1],v[0]) for k,v in d.items()}
[^] # Re: Expressivité
Posté par Philippe F (site web personnel) . En réponse au journal Les 7 étapes pour devenir un programmeur Go.. Évalué à 5.
J'ai du mal à voir C++ et expressivité dans la même phrase, et Python dans la catégorie "inexpressivité". Pour le reste du commentaire, je suis plutôt d'accord.
J'exprime mon désaccord sur les deux points:
Python est au contraire un langage très expressif, le programmeur peut manifester son intention en très peu de lignes de code. Le boiler-plate code en Python est quasiment inexistant.
A l'opposé, à chaque fois que j'utilise la STL en C++, mes yeux pleurent, je me dis que 120 colonnes pour une ligne, c'est bien peu quand tu veux manipuler une structure un tant soit peu élaborée.
Allez, au hasard, parcourons une map/un dict de string vers des paires de string en Python et en C++ et inversons les paires:
En Python:
En C++:
En terme d'expressivité et lisibilité, je trouve que la version Python s'en sort beaucoup beaucoup mieux.
Et encore, il aurait été de bon ton d'expliciter l'instanciation de make_pair<> .
Alors, certes, en C++11, on peut faire plus compact en utilisant des auto et surement avec d'autres trucs (lambda ? foreach ?). Mais tout le monde ne les connait pas.
On peut aussi faire bien plus compact en Python mais on tombe sur le même problème: la syntaxe des Python compréhensions est peu connue (par exemple, aucun de mes collègues de travail ne connait):
d = { k:(v[1],v[0]) for k,v in d.items()}