49 votes

La déclaration "if" est-elle considérée comme une méthode?

Une discussion intéressante a eu lieu entre mes collègues sur le point de savoir si la déclaration "si" est considérée ou non comme une méthode. Bien que "if" soit ajouté au mot statement, il se comporte toujours de la même manière qu'une méthode de valeur non-retour simple.

Par exemple:

 if(myValue) //myValue is the parameter passed in
{
    //Execute
}
 

De même, une méthode peut effectuer la même opération:

 public void MyMethod(myValue)
{
    switch(myValue)
    {
        case true:
            //Logic
            break;
        case false:
            //Logic
            break;
    }
}
 

Est-il exact d'appeler (considérer) la déclaration "if" comme une simple méthode prédéfinie dans un langage de programmation?

106voto

Óscar López Points 97105

Dans des langages tels que C, C++, C#, Java, IF est une déclaration de mise en œuvre comme un mot réservé, une partie de la base de la langue. Dans les langages de programmation de la famille du LISP (Régime vient à l'esprit) IF est une expression (ce qui signifie qu'il renvoie une valeur) et est mis en œuvre comme une forme particulière. D'autre part, dans le plus pur des langages orientés objet tels que Smalltalk, IF vraiment est une méthode (plus précisément: un message), généralement mis en œuvre sur l' Boolean de la classe ou de l'un de ses sous-classes.

Bottom line: la vraie nature de l'instruction conditionnelle IF dépend du langage de programmation, et sur le paradigme de programmation de cette langue.

42voto

Eric Lippert Points 300275

Non, l'instruction "if" n'est en rien une méthode en C#. Examiner les façons dont il n'est pas comme une méthode:

  • Les entités dans le bloc contenant sont dans la portée dans le corps d'un "si". Mais une méthode ne permet pas d'obtenir n'importe quel accès à la liaison de l'environnement de son visiteur.
  • Dans de nombreuses langues, les méthodes sont les membres de quelque chose-un type, probablement. Les déclarations ne sont pas membres.
  • Dans les langues avec la première classe de méthodes, les méthodes peuvent être passés en tant que données. (En C#, en les convertissant aux délégués.) "si les" déclarations ne sont pas de première classe.
  • et ainsi de suite. Les différences sont nombreuses.

Maintenant, il est logique de penser à certaines choses, comme une sorte de méthode, pas de "si" des déclarations. De nombreux opérateurs, par exemple, sont un peu comme des méthodes. Il y a très peu de différence conceptuelle entre:

decimal x = y + z;

et

decimal x = Add(y, z);

Et en fait, si vous démontez un plus de deux décimales, en C#, vous verrez que le code généré en fait est un appel de méthode.

Certains opérateurs ont des caractéristiques particulières qui font qu'il est difficile de les caractériser comme des méthodes:

bool x = Y() && Z();

est différente de

bool x = Et Y(), Z());

dans une langue qui a hâte d'évaluation des arguments de méthode; dans le premier, Z() n'est pas évaluée si Y() est faux. Dans le second, les deux sont évaluées.

Votre création de "si" méthode plutôt soulève la question; la mise en œuvre est plus complexe qu'une instruction "if". Dire que vous pouvez émuler "si" avec un interrupteur, c'est comme dire que vous pouvez émuler un vélo, une moto, en remplacement de quelque chose de simple avec quelque chose de beaucoup plus complexe, n'est pas convaincante. Il serait plus raisonnable de dire qu'un interrupteur est en fait un caprice "si".

14voto

Adam Davis Points 47683

Vous ne pouvez pas créer de méthode myIfStatement() et attendre les résultats suivants:

 ...
myIfStatement(something == somethingElse)
{
   // execute if equal
}
else
{
   // execute if different
}
 

if est une instruction de contrôle et ne peut pas être répliquée par une méthode. Vous ne pouvez pas non plus remplacer un appel de méthode par:

 myVariable = if(something == somethingElse);
 

if ne peut pas être surchargé.

Ce sont quelques signes que if n'est pas une méthode, mais il y en a d'autres que je soupçonne.

8voto

stu Points 2216

Cela dépend certainement de la langue, mais en C, java, perl, non, ce sont des commandes de langue. Mots réservés. Si c'étaient des fonctions, vous seriez capable de les surcharger, d'obtenir des pointeurs vers elles et de faire tout ce que vous pouvez faire avec les fonctions.

Il s’agit cependant d’une question de philosophie et de programmation plutôt que d’une question de programmation.

4voto

SiN Points 1795

Une méthode a une signature et son intention principale est la logique pouvant être résolue , alors que si est simplement une condition qui contrôle le déroulement de l’exécution. Si vous comprenez assemblage, vous saurez que les deux sont différents, même à un niveau très bas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X