Wat betekent het vraagteken aan het einde van een methodenaam in Ruby?

Wat is het doel van de vraagteken-operator in Ruby?

Soms ziet het er zo uit:

assert !product.valid?

soms zit het in een ifconstructie.


Antwoord 1, autoriteit 100%

Het is een codestijlconventie; het geeft aan dat een methode een booleaanse waarde (true of false) of een object retourneert om een ​​echte waarde (of “truthy” -waarde aan te geven).

Het vraagteken is een geldig teken aan het einde van een methodenaam.

https://docs. ruby-lang.org/en/2.0.0/syntax/methods_rdoc.html#label-Method+Names


Antwoord 2, autoriteit 26%

Let ook op ?samen met een teken fungeert als afkorting voor een letterlijke tekenreeks van één teken sinds Ruby 1.9.

Bijvoorbeeld:

?F # => is the same as "F"

Hier wordt verwezen in de buurt van de onderkant van de string letterlijke sectie van de ruby ​​docs:

Er is ook een letterlijke tekennotatie om single weer te geven
tekenreeksen, welke syntaxis een vraagteken (?) is gevolgd door a
enkel teken of escape-reeks die overeenkomt met een enkele
codepunt in de scriptcodering:

?a       #=> "a"
?abc     #=> SyntaxError
?\n      #=> "\n"
?\s      #=> " "
?\\      #=> "\\"
?\u{41}  #=> "A"
?\C-a    #=> "\x01"
?\M-a    #=> "\xE1"
?\M-\C-a #=> "\x81"
?\C-\M-a #=> "\x81", same as above
?あ      #=> "あ"

Vóór Ruby 1.9 retourneerde dit de ASCII-tekencode van het teken. Om het oude gedrag in moderne Ruby te krijgen, kun je de #ordmethode gebruiken:

?F.ord # => will return 70

Antwoord 3, autoriteit 15%

Het is een conventie in Ruby dat methoden die booleaanse waarden retourneren, eindigen op een vraagteken. Er is niet meer betekenis aan dan dat.


Antwoord 4, autoriteit 9%

In uw voorbeeld is het slechts een deel van de methodenaam. In Ruby kun je ook uitroeptekens gebruiken in methodenamen!

Een ander voorbeeld van vraagtekens in Ruby is de ternaire operator.

customerName == "Fred" ? "Hello Fred" : "Who are you?"

Antwoord 5, autoriteit 6%

Het is misschien de moeite waard om erop te wijzen dat ?en alleen zijn toegestaan ​​in methodenamen, niet in variabelen. Tijdens het leren van Ruby nam ik aan dat ?een booleaans retourtype aanduidde, dus ik probeerde ze toe te voegen aan vlagvariabelen, wat tot fouten leidde. Dit leidde ertoe dat ik een tijdje ten onrechte geloofde dat er een speciale syntaxis was met ?s.

Relevant: Waarom kan een variabelenaam niet eindigen op `?` terwijl een methodenaam dat wel kan?


Antwoord 6, autoriteit 6%

In jouw voorbeeld

product.valid?

Is eigenlijk een functieaanroep en roept een functie met de naam valid?. Bepaalde typen “test voor conditie”/booleaanse functies hebben volgens afspraak een vraagteken als onderdeel van de functienaam.


Antwoord 7, autoriteit 3%

Ik geloof dat het gewoon een conventie is voor dingen die booleaans zijn. Een beetje alsof je “IsValid” zegt.


Antwoord 8

Het wordt ook gebruikt in reguliere expressies, wat betekent “maximaal één herhaling van het voorgaande teken”

bijvoorbeeld de reguliere expressie /hey?/komt overeen met de strings “he” en “hey“.


Antwoord 9

Het is ook een gebruikelijke conventie om te gebruiken met het eerste argument van de testmethode van Kernel #test

test ?d, "/dev" # directory exists?
# => true
test ?-, "/etc/hosts", "/etc/hosts" # are the files identical
# => true

zoals te zien is in deze vraag hier

Other episodes