Qu'est-ce que le moi de Ruby?

Cible de l'article

Qu'est-ce que le soi? Qu'est-ce qu'une méthode de classe? Je comprends en quelque sorte la classe et l'instance

Que expliquer dans cet article

Description générale de soi

soi est l'objet lui-même

Même si on me le disait, cela ne m'est pas venu à l'esprit. Cependant, je pense que c'est vrai maintenant que j'en suis tombé amoureux.

Qu'est-ce qu'un objet

Comprenons d'abord les objets. Dans Ruby, tout est objet.

Dans le monde réel, nous traitons toutes sortes de choses telles que les personnes, les choses et les animaux comme des objets.

Différence entre objet et instance

La différence entre un objet et une instance a été expliquée de manière facile à comprendre sur le site suivant, veuillez donc le lire si vous êtes intéressé. En un mot ** Les objets créés à partir de classes sont appelés instances ** est.

Je comprends que la différence entre les objets d'instance de classe me fait me sentir comme un dieu

Génération d'instance

Nom de classe.new

Génération d'instance


class Sample
end

p Sample.new #=> #<Sample:0x00007fe79b835240>

L'instance a été créée.

À propos de soi

Jusqu'à présent, nous avons parlé d'instances et d'objets, mais finalement nous allons mettre un pied en soi. Pour le moment, créons un fichier rb approprié et exécutons-le. Ou essayez de taper irb dans le terminal, puis de taper self. (Vous ne pouvez pas l'utiliser à moins d'avoir installé Ruby. Si vous n'obtenez pas les informations de version en tapant ruby -v, il n'est pas installé, veuillez donc l'installer.)

sample.rb


  p self
  #=> main

Le principal est sorti. Qu'est-ce que le principal?

En un mot ** main est une instance de la classe Object qui existe au niveau supérieur. ** ** c'est difficile.

Je vais l'expliquer fermement. Commençons par la classe Object.

Classe d'objets

La classe Object est une classe qui se trouve au sommet (parent) réel de la classe. (En fait, il y a une autre classe ci-dessus, mais je vais l'omettre ici.) La classe a une structure hiérarchique et la classe parent telle que la classe de chaîne de caractères est la classe Object. (Vous pouvez obtenir votre propre classe avec la méthode de classe et la classe parente avec la méthode de superclasse.)

p "Chaîne".class #=> String
p String.superclass #=> Object

Haut niveau

Vient ensuite le niveau supérieur, qui est en dehors des définitions de classe et de module. (Je ne parlerai pas du module dans cet article. Considérez-le comme une classe restreinte.)

Haut niveau


#d'ici
#
#
#
#C'est le niveau supérieur
class Sample
  #En classe
end
#d'ici
#
#
#
#Haut niveau jusqu'à présent
module SampleModule
  #Dans le module
end
#d'ici
#
#
#
#Haut niveau jusqu'à présent

Et quand je frappe irb au terminal, c'est aussi le niveau supérieur. Lorsque vous tapez irb dans le terminal irb(main):001:0> Ce sera. Vous pouvez voir que c'est le niveau supérieur, et qu'il y a main après irb.

Aussi, si vous vérifiez l'auto-classe au plus haut niveau

p self       #=> main
p self.class #=> Object

Vous pouvez voir que la classe self (principale) de niveau supérieur est Object.

Revenant à ce que j'ai dit plus tôt `main est une instance de la classe Object qui existe au niveau supérieur. C'était ". c'est

Le résultat de l'exécution de la méthode p au niveau supérieur était p self # => main. Et c'était p self.class # => Object Et soi fait référence à l'objet lui-même (l'instance elle-même).

Vous pouvez également voir à partir de.

La raison pour laquelle vous pouvez soudainement exécuter des méthodes p, etc. au niveau supérieur est que main est une instance de la classe Object! (La bonne réponse est qu'il peut être exécuté car le module Kernel est inclus dans la classe Object, mais il est omis ici.)

Soi en classe

Ensuite, regardons soi-même dans la classe.

Soi en classe


class Sample
  p self #=> Sample
end

le moi était l'objet lui-même. Par conséquent, il représente l'objet de classe lui-même dans la classe.

Self dans la méthode d'instance

Self dans la méthode d'instance représente l'instance elle-même (l'objet lui-même).

Self dans la méthode d'instance


class Sample
  def hoge
    p self
  end
end
sample = Sample.new
sample.hoge #=> #<Sample:0x00007f8524034f70>

À propos, lorsque Ruby appelle une méthode, il appelle implicitement la méthode pour self. (Appelez la méthode pour vous-même sans permission.)

Qu'est-ce que ça veut dire

class Person
  def greeting
    p self
    hello
  end

  def hello
    p "hello"
  end
end

person = Person.new
person.greeting #=> #<Person:0x00007f9937848a28>
                #=> "hello"

La même chose est la suivante.

class Person
  def greeting
    p self 
    self.hello
  end

  def hello
    p "hello"
  end
end

person = Person.new
person.greeting #=> #<Person:0x00007f9937848a28>
                #=> "hello"

Avez-vous remarqué ce qui est différent? C'est vrai. L'appel à bonjour dans la méthode de salutation est précédé de self. En fait, ce moi est le même avec ou sans lui. Je pense que c'est cette spécification car il est difficile de s'ajouter à chaque fois qu'une méthode est appelée.

À ce stade, self dans la méthode de salutation est l'instance de la classe Person elle-même, donc la méthode hello est appelée pour cette instance. (self.hellodans laméthode de salutation et` person.hello de premier niveau ont le même résultat.)

Méthode de classe auto

Self dans la méthode de classe représente également l'objet lui-même.

Méthode d'auto en classe


class Person
  def self.greeting
    p self
  end
end

Person.greeting #=> Person

La personne est renvoyée.

Bien sûr, le self dans cette partie de définition de méthode représente également l'objet lui-même, mais le self dans l'emplacement de définition de méthode est un peu étrange.

def self.greeting #← Ce moi
end

Une méthode de classe est l'une des méthodes singulières. Alors, qu'est-ce qu'une méthode singulière?

Méthode singulière

Les méthodes singulières définissent des méthodes pour des objets individuels (instances) quelle que soit la classe.

morning = "good morning"
def morning.greeting
  p self
end

morning.greeting #=> "good morning"

Qu'est-ce qui se passe avec ça? Premièrement, avec morning =" bonjour ", la chaîne de caractères "bonjour" est affectée à la variable (objet) appelée matin. Après cela, la méthode de salutation est définie pour l'objet du matin. Dans la méthode de salutation, la méthode p renvoie self. Dans ce cas, self est un objet string "bonjour" La chaîne "bonjour" est sortie.

Ce formulaire est une méthode singulière.

C'est la même chose que la méthode de définition de méthode de classe.

Définition de la méthode de classe


class Person
  def self.greeting
  end
end

Par rapport au code ci-dessus, def 〇 〇. La méthode de définition est la même que le nom de la méthode. Et puisque le moi à cette époque était la personne

Définition de la méthode de classe


class Person
  def Person.greeting
  end
end

Vous pouvez également écrire comme ça.

finalement

J'ai essayé de m'utiliser moi-même à divers endroits. J'espère que vous pouvez comprendre que le soi représente la confiance en soi de l'objet.

Après tout, si vous déplacez le code vous-même et le vérifiez, votre compréhension augmentera. Si vous avez des questions, veuillez nous le faire savoir dans les commentaires.

référence

Rubima http://i.loveruby.net/ja/rhg/book/minimum.html

Recommended Posts

Qu'est-ce que le moi de Ruby?
Qu'est-ce que soi
Qu'est-ce que l'attr_accessor de Ruby?
Qu'est-ce qui est nul? ]
Qu'est-ce que 'java
Qu'est-ce que Keycloak
Qu'est-ce que Jackson?
Qu'est-ce que Jenkins
Qu'est-ce que ArgumentMatcher?
Qu'est-ce que IM-Juggling?
Qu'est-ce que les paramètres
Qu'est-ce que SLF4J?
Qu'est-ce que la façade? ??
Qu'est-ce que Java <>?
Qu'est-ce que Gradle?
Qu'est-ce que POJO
Qu'est-ce que 'java
Qu'est-ce que centOS
Qu'est-ce que RubyGem?
Qu'est-ce que before_action?
Qu'est-ce que Docker
Qu'est-ce que Byte?
Qu'est-ce que Tomcat
Qu'est-ce que `docker-compose up`?
Qu'est-ce qu'un constructeur
Qu'est-ce que le codage en dur?
Qu'est-ce qu'un flux
Qu'est-ce que l'encapsulation Java?
Qu'est-ce qu'une permission refusée?
Qu'est-ce que le contrôle d'instance?
Qu'est-ce qu'un initialiseur?
Qu'est-ce que Spring Tools 4
Qu'est-ce qu'un opérateur?
Qu'est-ce que l'orientation objet?
Qu'est-ce que le @VisibleForTesting de Guava?
Qu'est-ce qu'un modèle MVC?
Qu'est-ce qu'une annotation?
Qu'est-ce que la technologie Java?
Qu'est-ce que Java API-java
Qu'est-ce que @ (variable d'instance)?
Qu'est-ce que l'artefact de Gradle?
Qu'est-ce que l'audit JPA?
[Java] Qu'est-ce que flatMap?
Qu'est-ce qu'un servlet?
Qu'est-ce que le développement Web?
[Java] Qu'est-ce que ArrayList?
Qu'est-ce que l'orientation objet après tout?
Qu'est-ce que HttpSession session = request.getSession ();
Qu'est-ce que l'assertion Java? Résumé.
Qu'est-ce qu'une classe wrapper?
Qu'est-ce qu'un type booléen?