Quel est le but de l'opérateur de point d'interrogation dans Ruby?
Parfois, cela apparaît comme ceci:
assert !product.valid?
parfois c'est dans une if
construction.
Quel est le but de l'opérateur de point d'interrogation dans Ruby?
Parfois, cela apparaît comme ceci:
assert !product.valid?
parfois c'est dans une if
construction.
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.
?
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.
isEmpty()
, isDigit()
, etc. Ruby, les mêmes méthodes serait écrit empty?
et digit?
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é pour nullable
:)
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 ?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
.
'F'
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.
customerName == "Fred" ? "Hello Fred" : "Who are you?"
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.
Je crois que c'est juste une convention pour les choses booléennes. Un peu comme dire " IsValid
".
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
".
C'est aussi une convention courante à utiliser avec le premier argument de la méthode de test de Kernel # test
irb(main):001:0> test ?d, "/dev" # directory exists?
=> true
irb(main):002:0> test ?-, "/etc/hosts", "/etc/hosts" # are the files identical
=> true
comme on le voit dans cette question ici
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 avec test ?d, "/dev"
ou test "d", "/dev"
.