2009-09-25 7 views
1

Je trouve ce qui suit dans le code.qu'est-ce que underscore signifie dans Delphi4

_name1 
_name2 
smeEGiGross: 

En général, qu'est-ce que signifie _name1 underscore dans Delphi 4?

+2

Vous ne l'avez pas trouvé dans le code. Ce n'est pas syntaxiquement valide. Veuillez copier et coller le code réel. –

Répondre

5

Je pense que c'est une pratique courante de commencer les noms de variables avec des traits de soulignement.

noms dans Delphi

Règles pour variables (et composants):

  • nom peut être une longueur, mais Delphi utilise seulement 255 premiers caractères.
  • Le premier caractère doit être une lettre ou un trait de soulignement et non un nombre.
  • Vous ne pouvez pas utiliser de caractères spéciaux tels qu'un point d'interrogation (?), Mais vous pouvez utiliser un caractère de soulignement (_).
  • Aucune zone d'espaces autorisée dans le nom d'une variable.
  • Les mots réservés (tels que begin, end, if, program) ne peuvent pas être utilisés comme variables.
  • Delphi est insensible à la casse - peu importe que les lettres majuscules soient utilisées ou non. Assurez-vous simplement que la façon dont les variables ou les composants sont utilisés est cohérente dans tout le programme.
+7

Sachez que la pratique courante n'est pas la même chose qu'une bonne pratique –

+1

Yep. J'ai également vu double underscores dans les noms de variables. – rahul

+3

@phoenix, +1, Mais vous avez oublié le & construction qui peut être ajouté pour transformer les mots réservés en identifiants: & if, & then. –

4

Pour ajouter à la réponse du phénix:

* You can use reserved words as identifiers, but you must add a & sign: &then, 
    &unit. 
I only use this if another name ís not apropriate. 

j'associe traits de soulignement avec C/C++ non avec Delphi. La syntaxe C est plus orientée caractère (comme {,}, || et & &) donc les traits de soulignement s'adaptent parfaitement. Tandis que la syntaxe Delphi/Pascal est plus orientée texte (begin, end, or, and), les underscores ont l'air un peu étranges car vous ne les attendez pas ici.

+1

Merci @gamecat de fournir cette information. – rahul

5

C'est une convention pour aider à déterminer la portée d'une variable par son nom, comme les membres de la classe privée. L'auteur original utilise probablement aussi C++.

En Delphi, je préfère préfixer les champs avec "F", les paramètres de méthode avec "a" (argument) et les variables locales avec "l".

Mise à jour:

Un autre endroit que vous pourriez voir underscores est après certains identifiants dans le code généré avec WSDLIMP ou TLBIMP pour éviter toute confusion avec des identificateurs Delphi existants. Par exemple, sauf indication contraire, "Nom" est renommé (sans jeu de mots) en "Nom_".

4

Il est régulièrement utilisé pour la portée.

Je déclare toutes mes variables privées avec un _ au début, ce qui est plus commun en C#/C++.

C'est pour la lisibilité et ne signifie pas nécessairement quelque chose.

2

Je ne peux pas dire ce que pensait l'auteur du code que vous avez en tête, mais un préfixe de soulignement a une convention assez bien reconnue par rapport à COM. Les membres d'une interface COM qui ont un préfixe de soulignement sont (ou étaient) masqués par défaut par les navigateurs/inspecteurs d'interface, tels que le navigateur de bibliothèque de VB, etc.Ceci est utilisé lorsque les membres sont publiés par nécessité mais ne sont pas destinés à être utilisés directement.

Les _AddRef et _Release membres de la interface IUnknown sont peut-être l'exemple le plus évident de cela. J'ai moi-même adopté cette convention, par exemple si je déclare une variable d'implémentation d'unité qui est exposée via l'interface d'unité via une fonction accesseur, je nommerai la variable avec un préfixe de soulignement. Ce n'est pas strictement nécessaire dans ce genre d'exemple, mais cela sert de documentation pour moi-même (et pour quiconque lit mon code qui est au courant de la convention, ce qui est assez évident dans le contexte). Un autre exemple est quand j'ai un pointeur de fonction qui peut faire référence à différentes fonctions en fonction des conditions d'exécution de sorte que les fonctions auxquelles le pointeur peut se référer ne sont pas appelées directement mais sont appelées par la fonction aiguille. En ce qui me concerne, je l'utilise comme un avertissement/rappel .... Procéder avec prudence, vous ne devez pas faire référence directement à ce symbole.