À propos des variables et de la portée (ruby)

J'espère que vous trouverez des informations utiles sur les variables fréquemment utilisées et leurs plages utilisables. De plus, comme j'étudie depuis environ deux mois et demi, il peut y avoir des erreurs. Cliquez ici pour le contenu de l'article

Au fait, voici la version de ruby que vous apprenez


ruby 2.6.5

Qu'est-ce qu'une variable?

Considérez une variable comme une «boîte pour stocker des valeurs arbitraires». Par exemple, c'est une image de mettre le mot «pomme» dans la case (variable) étiquetée «pomme». Ceci est exprimé par "** attribuer ** le caractère" pomme "à la variable pomme". Utilisez également "=" lors de la substitution. Soyez prudent car la signification est différente de l'arithmétique "=".

apple = "pomme"

En créant (définissant) une variable de cette manière, vous pouvez utiliser la valeur du contenu simplement en appelant cette variable.

puts apple
=>pomme

Pourquoi y a-t-il des variables?

La raison en est que l'écriture du même code à plusieurs reprises est une tâche très longue, donc si vous définissez les variables à l'avance, vous pouvez gagner du temps et corriger les valeurs même s'il y a des corrections. Sera. Par exemple, si vous écrivez un programme qui calcule l'aire de plusieurs cercles, l'aire du cercle peut être calculée par "rapport rayon x rayon x circonférence". Si le rapport de circonférence est de 3,14,

#Formule pour l'aire d'un cercle de rayon 3
3 * 3 * 3.14 

#Formule pour l'aire d'un cercle de rayon 5
5 * 5 * 3.14

Il peut être calculé par cette formule. Cependant, si "Je veux que vous corrigiez le rapport de circonférence à 3" au moment où vous avez écrit le programme dans une certaine mesure, vous devez corriger tous les rapports de circonférence dans la description ci-dessus. Définissons donc une variable pour le rapport de circonférence.

#Définissez le rapport de circonférence avec la variable pi
pi = 3.14

#Formule pour l'aire d'un cercle de rayon 3
3 * 3 * pi

#Formule pour l'aire d'un cercle de rayon 5
5 * 5 * pi

En faisant ce qui précède, si le rapport de circonférence est corrigé, si la valeur de la variable est corrigée, d'autres expressions seront également corrigées. Donc, pour les valeurs qui sont utilisées à plusieurs reprises, faisons quelque chose comme "assigner à une variable".

Type de variable

Il existe 5 types de variables ruby, chacune avec une plage d'utilisation différente. Les types de variables sont classés dans l'un des suivants par la première lettre.

Type de variable La description Plage utilisable (portée)
Variables globales $〇〇 Peut être référencé et mis à jour de n'importe où dans le script
Variable de classe @@〇〇 Peut être référencé n'importe où dans la classe
Variable d'instance @〇〇 Peut être référencé n'importe où dans l'instance
Variables locales 〇〇 Ne peut être référencé que dans la méthode définie
Pseudo variable soi, nul, etc.

Ces variables ont le concept de portée, qui définit la plage dans laquelle elles peuvent être utilisées. (Sauf pour les pseudo variables) Si vous ne connaissez pas cette plage utilisable, des erreurs se produiront fréquemment, soyez donc prudent.

Plage utilisable (portée)

Variables globales

Les variables globales définies avec un $ au début peuvent être utilisées quelle que soit la portée. La plus large portée. (Soyez donc prudent lorsque vous l'utilisez)


$hoge = "hoge"

def huga
  puts $hoge => "hoge"
end
  huga #=> "hoge"

Variable de classe

C'est une variable partagée par toute la classe, et est définie comme une variable de classe si le nom de la variable commence par @@, comme @@ 〇〇.

class User
    @@name = "tanaka"

    def name
      puts @@name
    end
end

user_first = User.new
user_first.name #=> "tanaka"

À première vue, c'est pratique, mais en raison de la large plage, il peut être écrasé involontairement et la valeur peut changer.


class User
    def initialize(name)
        @@name = name
    end

    def name
      puts @@name
    end
end

user_first = User.new("suzuki")
user_second = User.new("sato")
user_first.name #=> "sato"
user_secont.name #=> "sato"

Variable d'instance

Les variables d'instance sont des variables qui ont une valeur pour chaque instance créée à partir de la classe. La portée est dans l'instance. Écrivons-le de la même manière que l'exemple de variable de classe ci-dessus.


class User
    def initialize(name)
        @name = name
    end

    def name
      puts @name
    end
end

user_first = User.new("suzuki")
user_second = User.new("sato")
user_first.name #=> "suzuki"
user_second.name #=> "sato"

Contrairement à avant, la valeur n'est pas écrasée. Les variables d'instance sont très souvent utilisées lors de la création d'applications avec Ruby on Rails, alors assurez-vous de les comprendre. Pour le flux de processus de l'instance, reportez-vous à cet article car il est facile à comprendre.

[Ruby] J'ai de nouveau découvert les classes et les instances

Variables locales

Les variables locales sont les variables de portée la plus étroite et ne peuvent être utilisées que dans les méthodes définies. Comme dans l'exemple précédent, changeons la variable d'instance en variable locale.


class User
    def initialize(name)
        local_name = name
    end

    def name
      puts local_name
    end
end

user1 = User.new("suzuki")
user2 = User.new("sato")
user1.name 
user2.name 
 #L'erreur suivante se produit
=> undefined local variable or method `local_name' for #<User:0x00007fd91d104f48> (NameError)

Si vous l'exécutez en tant que variable locale, l'erreur ci-dessus se produira. C'est parce que j'ai essayé d'appeler une variable en dehors de la portée, donc j'obtiens l'erreur "Il n'y a pas de telle méthode". Comme vous pouvez le voir, chaque variable a une portée, soyez donc prudent lorsque vous l'utilisez.

Pseudo variable

C'est une variable spéciale qui est différente d'une variable normale.

** self ** L'objet de la méthode actuelle elle-même ** nil ** La seule instance de la classe NilClass? ** true ** La seule instance de la classe TrueClass ?. Vraie valeur représentative ** false ** FalseClass? La seule instance de la classe. Représente faux ** \ __FILE __ ** Représente le nom du fichier source actuel ** \ __LINE __ ** Représente le numéro de ligne dans le fichier source actuel

Si vous essayez de définir les mêmes variables que ces noms de variables, vous obtiendrez l'erreur suivante:

SyntaxError ((irb):1: Can't change the value of self)
self = hoge
^~~~

Puisqu'il ne peut pas changer la valeur de soi, c'est une erreur que «la valeur de soi ne peut pas être changée». Je comprends que c'est une variable qui a été définie à l'origine et qui ne peut pas être modifiée. (J'étudie ici)

finalement

Types et étendues de variables, etc ... Si vous ne comprenez pas les bases, des erreurs se produiront fréquemment lors de la création d'applications. Les bases sont vraiment importantes. Je continuerai d'étudier dur et d'approfondir ma compréhension.

Le site que j'ai utilisé comme référence

[Ruby] J'ai de nouveau découvert les classes et les instances [Manuel de référence de Ruby 2.7.0] (https://docs.ruby-lang.org/ja/latest/doc/spec=2fvariables.html#instance) [Rubis inversé] (https://sites.google.com/site/gyakuhikiruby/home/bian-shutosukopu) Connaissez les types de variables! Comment utiliser la portée variable dans Ruby

Recommended Posts

À propos des variables et de la portée (ruby)
Plage où les variables peuvent être utilisées avec ruby [Scope]
Utilisez des variables ruby en javascript.
Portée
[Ruby] Gérez les variables d'instance avec des méthodes d'instance
[Connaissance de base de Java] Portée des variables
[Ruby] Afficher le contenu des variables
Ruby apprentissage 4
Ruby apprentissage 5
Bases de Ruby
Revue Ruby 2
Ajout de rubis
Point 57 Réduire la portée des variables locales
Ruby apprentissage 3
Paramètre Ruby 2
Problème de rubis ⑦
Ruby apprentissage 2
Ruby apprentissage 6
Paramètres Ruby 1
À propos de la portée
Ruby apprentissage 1
form_with scope
Ruby Review 1
[Ruby] Connaissance de base des variables d'instance de classe, etc.
Comparaison entre Java et Swift (1) Source control / Scope / Variables