Le point d'interrogation à la fin d'une fonction n'est pas un opérateur, c'est un caractère ordinaire. Le point d'interrogation avec deux points est un opérateur conditionnel ternaire. Le point d'interrogation est en soi un opérateur de citation unaire. Voir stackoverflow.com/questions/16641205/…
Old Pro
Réponses:
296
Il s'agit d'une convention de style de code; il indique qu'une méthode renvoie une valeur booléenne.
Le point d'interrogation est un caractère valide à la fin d'un nom de méthode.
Merci, mais cette convention signifie-t-elle qu'elle ne fait que la logique ou pourrait-il y avoir des effets secondaires? C'est drôle comme c'est une sorte de hack autour d'une langue tapée avec le type de retour dans le code.
Jason
5
Dans ce cas, il s'agit strictement d'une convention de dénomination de méthode. Il n'y a pas d'application d'une valeur de retour booléenne. Ce n'est pas parce que le nom de la méthode se termine par un point d'interrogation que la méthode doit renvoyer un booléen ... mais elle doit certainement renvoyer un booléen. Cependant, il existe plusieurs autres utilisations de ?Ruby (est un opérateur ternaire, convertissant un caractère en son entier ASCII, utilisation dans test, dans RegEx'es, etc.), dont beaucoup sont couverts dans les autres réponses ici.
Karl Wilbur
4
@Jason FYI, même les langues fortement typées ont des conventions comme celle-ci. Par exemple, dans les méthodes Java qui renvoient une valeur booléenne sont souvent préfixées « est », comme isEmpty(), isDigit(), etc. Ruby, les mêmes méthodes serait écrit empty?et digit?qui est tout à fait un peu mieux l' OMI.
Ajedi32
3
Ajedi32 - Oui, je suis d'accord, c'est bien de nommer des fonctions comme ça, j'utilise istout le temps. Cela pourrait être super déroutant pour quelqu'un qui vient de Swift puisque la marque de question , il est utilisé pour nullable:)
Jason
83
Notez également ?avec un caractère, retournera le code de caractère ASCII pourA
Par exemple:
?F # => will return 70
Alternativement dans ruby 1.8, vous pouvez faire:
"F"[0]
ou en rubis 1.9:
"F".ord
Notez également que ?Fretournera la chaîne "F", donc afin de raccourcir le code, vous pouvez également utiliser ?F.orddans Ruby 1.9 pour obtenir le même résultat que "F".ord.
C'est une convention dans Ruby que les méthodes qui renvoient des valeurs booléennes se terminent par un point d'interrogation. Il n'y a pas plus d'importance que cela.
Dans votre exemple, cela fait simplement partie du nom de la méthode. Dans Ruby, vous pouvez également utiliser des points d'exclamation dans les noms de méthode!
Un autre exemple de points d'interrogation dans Ruby serait l'opérateur ternaire.
Pour développer la réponse d'Andy, vous verrez également des choses comme: customerName == user.logged_in? ? user.name: "Qui êtes-vous?" Notez le double point d'interrogation
Question Mark
16
Dans votre exemple
product.valid?
Est en fait un appel de fonction et appelle une fonction nommée valid?. Certains types de "test de condition" / fonctions booléennes ont un point d'interrogation dans le cadre du nom de la fonction par convention.
Il peut être utile de souligner que les ?s ne sont autorisés que dans les noms de méthode, pas dans les variables. Dans le processus d'apprentissage de Ruby, j'ai supposé que ?désigné un type de retour booléen, j'ai donc essayé de les ajouter aux variables d'indicateur, ce qui entraînait des erreurs. Cela m'a fait croire à tort pendant un certain temps qu'il existait une syntaxe spéciale concernant l' ?art.
Ce n'est pas lié à test, ?dc'est un raccourci pour "d". testprend une chaîne d'un caractère comme premier argument, vous pouvez donc l'appeler avec test ?d, "/dev"ou test "d", "/dev".
Réponses:
Il s'agit d'une convention de style de code; il indique qu'une méthode renvoie une valeur booléenne.
Le point d'interrogation est un caractère valide à la fin d'un nom de méthode.
la source
?
Ruby (est un opérateur ternaire, convertissant un caractère en son entier ASCII, utilisation danstest
, dans RegEx'es, etc.), dont beaucoup sont couverts dans les autres réponses ici.isEmpty()
,isDigit()
, etc. Ruby, les mêmes méthodes serait écritempty?
etdigit?
qui est tout à fait un peu mieux l' OMI.is
tout le temps. Cela pourrait être super déroutant pour quelqu'un qui vient de Swift puisque la marque de question , il est utilisé pournullable
:)Notez également
?
avec un caractère, retournera le code de caractère ASCII pourA
Par exemple:
Alternativement dans ruby 1.8, vous pouvez faire:
ou en rubis 1.9:
Notez également que
?F
retournera la chaîne"F"
, donc afin de raccourcir le code, vous pouvez également utiliser?F.ord
dans Ruby 1.9 pour obtenir le même résultat que"F".ord
.la source
'F'
C'est une convention dans Ruby que les méthodes qui renvoient des valeurs booléennes se terminent par un point d'interrogation. Il n'y a pas plus d'importance que cela.
la source
Dans votre exemple, cela fait simplement partie du nom de la méthode. Dans Ruby, vous pouvez également utiliser des points d'exclamation dans les noms de méthode!
Un autre exemple de points d'interrogation dans Ruby serait l'opérateur ternaire.
la source
Dans votre exemple
Est en fait un appel de fonction et appelle une fonction nommée
valid?
. Certains types de "test de condition" / fonctions booléennes ont un point d'interrogation dans le cadre du nom de la fonction par convention.la source
Il peut être utile de souligner que les
?
s ne sont autorisés que dans les noms de méthode, pas dans les variables. Dans le processus d'apprentissage de Ruby, j'ai supposé que?
désigné un type de retour booléen, j'ai donc essayé de les ajouter aux variables d'indicateur, ce qui entraînait des erreurs. Cela m'a fait croire à tort pendant un certain temps qu'il existait une syntaxe spéciale concernant l'?
art.Pertinent: pourquoi un nom de variable ne peut-il pas se terminer par «?» Alors qu'un nom de méthode peut le faire?
la source
Je crois que c'est juste une convention pour les choses booléennes. Un peu comme dire "
IsValid
".la source
Il est également utilisé dans les expressions régulières, ce qui signifie "au plus une répétition du caractère précédent"
par exemple, l'expression régulière
/hey?/
correspond aux chaînes "he
" et "hey
".la source
C'est aussi une convention courante à utiliser avec le premier argument de la méthode de test de Kernel # test
comme on le voit dans cette question ici
la source
test
,?d
c'est un raccourci pour"d"
.test
prend une chaîne d'un caractère comme premier argument, vous pouvez donc l'appeler avectest ?d, "/dev"
outest "d", "/dev"
.