Mais enfin, je parle là pour un développer lambda. Ce qui s'est
passé avec << et >>, que la plupart des programmeurs C++ les
considèrent des opérateurs d'insertion et d'extraction
Dans
la contexte de la STL, dans la mesure qu'elle est devenu une
partie de la norme, et en fait une partie integrante du C++, on
a aussi défini une convention et des expectations.
Mais je ne
veux pas que le programmeur lambda prend ces exemples comme
excuse pour surcharger n'importe quoi n'importe comment.
on tombe très vite dans l'obfuscation.
Et le fait que c'est devenu la norme
« rédéfinit » les conventions du langage
Mais enfin, je parle là pour un développer lambda. Ce qui s'est
passé avec << et >>, que la plupart des programmeurs C++ les
considèrent des opérateurs d'insertion et d'extraction
Dans
la contexte de la STL, dans la mesure qu'elle est devenu une
partie de la norme, et en fait une partie integrante du C++, on
a aussi défini une convention et des expectations.
Mais je ne
veux pas que le programmeur lambda prend ces exemples comme
excuse pour surcharger n'importe quoi n'importe comment.
on tombe très vite dans l'obfuscation.
Et le fait que c'est devenu la norme
« rédéfinit » les conventions du langage
Mais enfin, je parle là pour un développer lambda. Ce qui s'est
passé avec << et >>, que la plupart des programmeurs C++ les
considèrent des opérateurs d'insertion et d'extraction
Dans
la contexte de la STL, dans la mesure qu'elle est devenu une
partie de la norme, et en fait une partie integrante du C++, on
a aussi défini une convention et des expectations.
Mais je ne
veux pas que le programmeur lambda prend ces exemples comme
excuse pour surcharger n'importe quoi n'importe comment.
on tombe très vite dans l'obfuscation.
Et le fait que c'est devenu la norme
« rédéfinit » les conventions du langage
Maintenant, si tu veux parler des cas où le nom ne convient
vraiment pas, uniquement sur la base de sa sémantique, parlons
de std::remove. (Et en passant, pourquoi dans la STL, il
s'appelle parfois remove, et d'autres fois erase ?)
Maintenant, si tu veux parler des cas où le nom ne convient
vraiment pas, uniquement sur la base de sa sémantique, parlons
de std::remove. (Et en passant, pourquoi dans la STL, il
s'appelle parfois remove, et d'autres fois erase ?)
Maintenant, si tu veux parler des cas où le nom ne convient
vraiment pas, uniquement sur la base de sa sémantique, parlons
de std::remove. (Et en passant, pourquoi dans la STL, il
s'appelle parfois remove, et d'autres fois erase ?)
On 20 Jan 2006 01:22:38 -0800, "kanze" :Dans le cas de la STL, j'estime qu'il y avait bien un peu d'abus
Pourquoi ?
La règle dans la surcharge des opérateurs, c'est qu'ils
fassent la même chose que les opérateurs sur un type de base.
Généralement, on prend int comme "base", mais étant donné que
le(s) type(s) "iterator" de la STL sont faits pour généraliser
la notion de pointeur, avoir la même sémantique que les
pointeurs ne me paraît pas un abus.
On peut, par contre, estimer que le mot "iterator" est ici un
abus, mais ce n'est plus une histoire de surcharge.
On 20 Jan 2006 01:22:38 -0800, "kanze" <kanze@gabi-soft.fr>:
Dans le cas de la STL, j'estime qu'il y avait bien un peu d'abus
Pourquoi ?
La règle dans la surcharge des opérateurs, c'est qu'ils
fassent la même chose que les opérateurs sur un type de base.
Généralement, on prend int comme "base", mais étant donné que
le(s) type(s) "iterator" de la STL sont faits pour généraliser
la notion de pointeur, avoir la même sémantique que les
pointeurs ne me paraît pas un abus.
On peut, par contre, estimer que le mot "iterator" est ici un
abus, mais ce n'est plus une histoire de surcharge.
On 20 Jan 2006 01:22:38 -0800, "kanze" :Dans le cas de la STL, j'estime qu'il y avait bien un peu d'abus
Pourquoi ?
La règle dans la surcharge des opérateurs, c'est qu'ils
fassent la même chose que les opérateurs sur un type de base.
Généralement, on prend int comme "base", mais étant donné que
le(s) type(s) "iterator" de la STL sont faits pour généraliser
la notion de pointeur, avoir la même sémantique que les
pointeurs ne me paraît pas un abus.
On peut, par contre, estimer que le mot "iterator" est ici un
abus, mais ce n'est plus une histoire de surcharge.
Mais enfin, je parle là pour un développer lambda. Ce qui
s'est passé avec << et >>, que la plupart des programmeurs
C++ les considèrent des opérateurs d'insertion et
d'extraction
N'importe qui sait qu'il s'agit des opérateurs left shift et
right shift simplement surchargés pour quand il y a un stream
à gauche.
Un programmeur C++ est au courant du principe selon lequel un
opérateur a /a priori/ un comportement totalement différent en
fonction des types sur lequel on l'applique.
Le programmeur est libre de faire ce qu'il veut avec les types
qu'il invente quand même, a lui d'en juger la pertinence. Dire
"la surchage c'est mal" ne mène à rien.
on tombe très vite dans l'obfuscation.
Le problème étant qu'il faut se réferer à la définition de
operator+(TypeDeGauche, TypeDeDroite) pour savoir ce que ça
fait, alors qu'une fonction a généralement un nom plus
explicite.
Enfin une fois qu'on est familiarisé avec l'objet en question
ça ne devrait plus poser de problèmes.
Mais enfin, je parle là pour un développer lambda. Ce qui
s'est passé avec << et >>, que la plupart des programmeurs
C++ les considèrent des opérateurs d'insertion et
d'extraction
N'importe qui sait qu'il s'agit des opérateurs left shift et
right shift simplement surchargés pour quand il y a un stream
à gauche.
Un programmeur C++ est au courant du principe selon lequel un
opérateur a /a priori/ un comportement totalement différent en
fonction des types sur lequel on l'applique.
Le programmeur est libre de faire ce qu'il veut avec les types
qu'il invente quand même, a lui d'en juger la pertinence. Dire
"la surchage c'est mal" ne mène à rien.
on tombe très vite dans l'obfuscation.
Le problème étant qu'il faut se réferer à la définition de
operator+(TypeDeGauche, TypeDeDroite) pour savoir ce que ça
fait, alors qu'une fonction a généralement un nom plus
explicite.
Enfin une fois qu'on est familiarisé avec l'objet en question
ça ne devrait plus poser de problèmes.
Mais enfin, je parle là pour un développer lambda. Ce qui
s'est passé avec << et >>, que la plupart des programmeurs
C++ les considèrent des opérateurs d'insertion et
d'extraction
N'importe qui sait qu'il s'agit des opérateurs left shift et
right shift simplement surchargés pour quand il y a un stream
à gauche.
Un programmeur C++ est au courant du principe selon lequel un
opérateur a /a priori/ un comportement totalement différent en
fonction des types sur lequel on l'applique.
Le programmeur est libre de faire ce qu'il veut avec les types
qu'il invente quand même, a lui d'en juger la pertinence. Dire
"la surchage c'est mal" ne mène à rien.
on tombe très vite dans l'obfuscation.
Le problème étant qu'il faut se réferer à la définition de
operator+(TypeDeGauche, TypeDeDroite) pour savoir ce que ça
fait, alors qu'une fonction a généralement un nom plus
explicite.
Enfin une fois qu'on est familiarisé avec l'objet en question
ça ne devrait plus poser de problèmes.
On 20 Jan 2006 05:58:32 -0800, "kanze" :Quelqu'un a posté une classe avec « iterator » dans son nom,
et certains se sont mis à la critiquer parce qu'elle n'était
pas conforme à la STL.
Ben oui. Quelles que soient les erreurs commises par le
comité, si tu crées une classe qui a exactement le même nom
qu'une classe de la STL, le lecteur va s'attendre à ce qu'elle
soit compatible. Si ce n'est pas le cas, je conseille
fortement de choisir un autre nom -- ne serait-ce que
"Iterator".
De même, si tu veux implémenter un vecteur (au sens
mathématique du terme), appeler ta classe "vector" ne fera
qu'apporter de la confusion.
En fait, j'ai une convention simple dans mon code : si un nom
de type ou de fonction ne commence pas par une majuscule,
c'est qu'il a la même sémantique qu'un type (ou une fonction)
homonyme dans la SL.
Maintenant, si tu veux parler des cas où le nom ne convient
vraiment pas, uniquement sur la base de sa sémantique,
parlons de std::remove.
On va dire que le "re" est de trop.
(Et en passant, pourquoi dans la STL, il s'appelle parfois
remove, et d'autres fois erase ?)
Il y a des cas où "erase" n'efface pas des éléments ?
Ce n'est pas un grand problème dans la mesure où personne
n'oublie que le mot peut avoir plusieurs significations, et
où tout le monde le tient en compte, et se pose la question
d'abord, quelle est la signification voulue par auteur ici,
Cf "méthode"...
On 20 Jan 2006 05:58:32 -0800, "kanze" <kanze@gabi-soft.fr>:
Quelqu'un a posté une classe avec « iterator » dans son nom,
et certains se sont mis à la critiquer parce qu'elle n'était
pas conforme à la STL.
Ben oui. Quelles que soient les erreurs commises par le
comité, si tu crées une classe qui a exactement le même nom
qu'une classe de la STL, le lecteur va s'attendre à ce qu'elle
soit compatible. Si ce n'est pas le cas, je conseille
fortement de choisir un autre nom -- ne serait-ce que
"Iterator".
De même, si tu veux implémenter un vecteur (au sens
mathématique du terme), appeler ta classe "vector" ne fera
qu'apporter de la confusion.
En fait, j'ai une convention simple dans mon code : si un nom
de type ou de fonction ne commence pas par une majuscule,
c'est qu'il a la même sémantique qu'un type (ou une fonction)
homonyme dans la SL.
Maintenant, si tu veux parler des cas où le nom ne convient
vraiment pas, uniquement sur la base de sa sémantique,
parlons de std::remove.
On va dire que le "re" est de trop.
(Et en passant, pourquoi dans la STL, il s'appelle parfois
remove, et d'autres fois erase ?)
Il y a des cas où "erase" n'efface pas des éléments ?
Ce n'est pas un grand problème dans la mesure où personne
n'oublie que le mot peut avoir plusieurs significations, et
où tout le monde le tient en compte, et se pose la question
d'abord, quelle est la signification voulue par auteur ici,
Cf "méthode"...
On 20 Jan 2006 05:58:32 -0800, "kanze" :Quelqu'un a posté une classe avec « iterator » dans son nom,
et certains se sont mis à la critiquer parce qu'elle n'était
pas conforme à la STL.
Ben oui. Quelles que soient les erreurs commises par le
comité, si tu crées une classe qui a exactement le même nom
qu'une classe de la STL, le lecteur va s'attendre à ce qu'elle
soit compatible. Si ce n'est pas le cas, je conseille
fortement de choisir un autre nom -- ne serait-ce que
"Iterator".
De même, si tu veux implémenter un vecteur (au sens
mathématique du terme), appeler ta classe "vector" ne fera
qu'apporter de la confusion.
En fait, j'ai une convention simple dans mon code : si un nom
de type ou de fonction ne commence pas par une majuscule,
c'est qu'il a la même sémantique qu'un type (ou une fonction)
homonyme dans la SL.
Maintenant, si tu veux parler des cas où le nom ne convient
vraiment pas, uniquement sur la base de sa sémantique,
parlons de std::remove.
On va dire que le "re" est de trop.
(Et en passant, pourquoi dans la STL, il s'appelle parfois
remove, et d'autres fois erase ?)
Il y a des cas où "erase" n'efface pas des éléments ?
Ce n'est pas un grand problème dans la mesure où personne
n'oublie que le mot peut avoir plusieurs significations, et
où tout le monde le tient en compte, et se pose la question
d'abord, quelle est la signification voulue par auteur ici,
Cf "méthode"...
Maintenant, si tu veux parler des cas où le nom ne convient
vraiment pas, uniquement sur la base de sa sémantique,
parlons de std::remove. (Et en passant, pourquoi dans la
STL, il s'appelle parfois remove, et d'autres fois erase ?)
Extrait en anglais :
The meaning of "removal" is somewhat subtle.
Remove does not destroy any iterators, and does not change the
distance between first and last. (There's no way that it could
do anything of the sort.)
Maintenant, si tu veux parler des cas où le nom ne convient
vraiment pas, uniquement sur la base de sa sémantique,
parlons de std::remove. (Et en passant, pourquoi dans la
STL, il s'appelle parfois remove, et d'autres fois erase ?)
Extrait en anglais :
The meaning of "removal" is somewhat subtle.
Remove does not destroy any iterators, and does not change the
distance between first and last. (There's no way that it could
do anything of the sort.)
Maintenant, si tu veux parler des cas où le nom ne convient
vraiment pas, uniquement sur la base de sa sémantique,
parlons de std::remove. (Et en passant, pourquoi dans la
STL, il s'appelle parfois remove, et d'autres fois erase ?)
Extrait en anglais :
The meaning of "removal" is somewhat subtle.
Remove does not destroy any iterators, and does not change the
distance between first and last. (There's no way that it could
do anything of the sort.)
kanze :Qui a dit quoique ce soit contre l'idée de surcharger les
opérateurs pour les objets. Ce qui n'est pas bien, c'est de
surcharger avec des significations arbitraires, sans rapport
avec la sémantique de l'opérateur de base. À la longue, ça
rend les programmes illisibles.
Alors qu'est-ce que tu proposerais pour remplacer les
operateurs << et >> sur les stream ?
Parce que dans ce contexte, il me semble qu'ils n'ont aucun
rapport avec le decalage de bit. (Et je ne trouve pas qu'ils
rendent le programme illisible.)
kanze :
Qui a dit quoique ce soit contre l'idée de surcharger les
opérateurs pour les objets. Ce qui n'est pas bien, c'est de
surcharger avec des significations arbitraires, sans rapport
avec la sémantique de l'opérateur de base. À la longue, ça
rend les programmes illisibles.
Alors qu'est-ce que tu proposerais pour remplacer les
operateurs << et >> sur les stream ?
Parce que dans ce contexte, il me semble qu'ils n'ont aucun
rapport avec le decalage de bit. (Et je ne trouve pas qu'ils
rendent le programme illisible.)
kanze :Qui a dit quoique ce soit contre l'idée de surcharger les
opérateurs pour les objets. Ce qui n'est pas bien, c'est de
surcharger avec des significations arbitraires, sans rapport
avec la sémantique de l'opérateur de base. À la longue, ça
rend les programmes illisibles.
Alors qu'est-ce que tu proposerais pour remplacer les
operateurs << et >> sur les stream ?
Parce que dans ce contexte, il me semble qu'ils n'ont aucun
rapport avec le decalage de bit. (Et je ne trouve pas qu'ils
rendent le programme illisible.)