Propriétés et fonctions
Nous avons actuellement deux problèmes reliés aux propriétés à résoudre pour la version 2 du langage de programmation D. Un premier viens du fait que les fonctions sans argument peuvent être appelées autant avec ou sans les parenthèses vide, ce qui crée des ambiguities lorsqu’une telle fonction retourne un type appelable (un pointeur de fonction, un delegate
ou un objet avec un membre opCall
). Le deuxième problème est que l’on veut que les proprieties soit des noms ou adjectifs et les actions des verbes. En anglais, beaucoup de mots sont à la fois nom, adjectif et verbe ce qui rend difficile de distinguer les fonctions par leur nom seulement.
Résoudre le premier problème revient à pouvoir déterminer quelles fonctions peuvent et doivent être appelées sans parenthèses. À moins de vouloir forcer toutes les fonctions sans paramètre à être appelé sans « () », nous devons avoir un indicateur discriminant les fonctions qui nécessite et celle qui ne nécessite pas de « () ».
Le deuxième problème est plus complexe. Il s’agit de la signification des mots. Prenons par exemple une fonction transform
. En lisant ce nom de fonction, vous développerez une idée de ce qu’elle fait. Alors je vous demande : est-ce qu’une fonction transform
est une action (un verbe) dans le sens qu’elle applique une transformation à un objet, où est-ce une propriété (un nom ou un adjectif) dans les sens qu’elle retourne quelque chose tel une « affine transform » associée à un objet ? La sémantique des deux est complètement différente, pourtant les deux partagent le même nom.
La véritable ambiguïté ici vient de la langue anglaise où plusieurs noms et adjectifs sont aussi des verbes. On pourrait passer à une langue qui n’a pas ces problèmes — par exemple le français : « transform » devient transformer (action, verbe) ou transformation (propriété, nom) ; « empty » devient vider (action, verbe) ou vide (propriété, adjectif) — mais ça ne semble pas une option viable.
Alors à part de passer à autre chose que l’anglais, nous avons deux autres options. Premièrement, nous pourrions écrire des règles dans un guide de programmation demandant à ce que les propriétés (noms, adjectifs) débute par un préfixe particulier. Je l’ai essayé, et je n’ai pas réussi à trouver quelque chose de raisonnable qui fonctionne pour les propriétés non-booléenes. C’est sans compter que la plupart des gens ne lisent pas ce genre de règle ; éduquer les utilisateurs pour qu’ils préfixent leur propriétés booléennes de « is », « has » ou d’un verbe modal serait un effort majeur. Ça fonctionne en Objective-C, mais la syntaxe des fonctions est complètement différentes en Objective-C.
La seule option restante, en assumant qu’on veuille toujours régler le problème, est d’introduire une syntaxe plus formelle en D pour distinguer les propriétés (noms, adjectifs) des actions (verbes). Un candidat tout naturel est d’utiliser la syntaxe sans parenthèse pour les propriétés, imitant ainsi les variables, et d’utiliser la syntaxe de fonction héritée des langages dérivés du C pour les actions. Trouver une bonne syntaxe pour définir une propriété est un défi plus compliqué puisqu’elle doit aider les programmeurs à faire le bon choix à savoir s’ils veulent une propriété ou une action sans non plus trop dévier de la syntaxe d’une fonction.
Et pour ce qui est de savoir si une propriété doit avoir un faible coût (ne rien faire de lourd), c’est un autre débat qui pourrait définir une norme de programmation.
Ceci est une adaptation d’un message posté sur le newsgroup du langage D.