Parfois, je vois des méthodes dans Ruby qui ont "?" et "!" à la fin, par exemple:
name = "sample_string"
name.reverse
name.reverse!
name.is_binary_data?
Je me demandais quel est leur but? S'agit-il simplement d'un revêtement en sucre de syntaxe?
Parfois, je vois des méthodes dans Ruby qui ont "?" et "!" à la fin, par exemple:
name = "sample_string"
name.reverse
name.reverse!
name.is_binary_data?
Je me demandais quel est leur but? S'agit-il simplement d'un revêtement en sucre de syntaxe?
Réponses:
C'est "juste un revêtement en sucre" pour plus de lisibilité, mais ils ont des significations communes:
!
effectuent des changements permanents ou potentiellement dangereux ; par exemple:Enumerable#sort
renvoie une version triée de l'objet tout en leEnumerable#sort!
triant sur place.ActiveRecord::Base#save
renvoie false si l'enregistrement a échoué, tandis queActiveRecord::Base#save!
déclenche une exception.Kernel::exit
provoque la fermeture d'un script, tout en leKernel::exit!
faisant immédiatement, en contournant les gestionnaires de sortie.?
un booléen , ce qui rend le code encore plus intuitif comme une phrase - seif number.zero?
lit comme "si le nombre est zéro", maisif number.zero
semble juste bizarre.Dans votre exemple, correspond
name.reverse
à une chaîne inversée, mais ce n'est qu'après laname.reverse!
ligne que laname
variable contient réellement le nom inversé.name.is_binary_data?
ressemble à "est-ce que desname
données binaires?".la source
Array#clear
, par exemple. Il efface le tableau. Effacer le tableau le fait muter naturellement. Il n'y a rien d'étonnant à cela, le nom l'indique déjà clairement: pas de bang. Voir ruby-forum.com/topic/176830#773946 .Le point d'interrogation indique que la méthode renvoie un booléen. Déjà répondu ici:
Que signifie l'opérateur point d'interrogation dans Ruby?
Le bang indique que la méthode agit sur l'objet lui-même. Déjà répondu ici:
Pourquoi les points d'exclamation sont-ils utilisés dans les méthodes Ruby?
la source
Dans Ruby
?
, cela signifie que la méthode va retourner un booléen et!
modifie l'objet sur lequel elle a été appelée. Ils sont là pour améliorer la lisibilité lors de l'examen du code.la source
Contrairement à - je suppose - la majorité des langages de programmation ...
De: http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/ , Section Noms de méthodes amusants
la source
?
sont également appelées méthodes de prédicat.Attention, ce n'est pas toujours le cas. Prenons par exemple Ruby Array # concat http://docs.ruby-lang.org/en/2.0.0/Array.html#method-i-concat .
Où vous pouvez vous brûler gravement est quelque chose comme
MyActiveRecordModel.column_names.concat([url])
. Les appels ultérieurs liés à MyActiveRecordModel essaieront de rechercher une colonne «url» pour MyActiveRecordModel et de lancer.Au lieu de cela, vous devez le cloner avant de faire le concat. Heureusement, ma suite de tests a attrapé celui-ci, mais ... attention!
la source