[RAILS] Premiers pas avec les modules Ruby

Premiers pas avec les modules Ruby

C'est un module qui est une fonction de Ruby, mais je pense que c'est l'une des parties qui est difficile à comprendre pour ceux qui sont nouveaux sur Ruby.

Alors cette fois, je vais résumer les modules.

Fonction du module

● Mix-in (inclure et étendre) ● Création d'un espace de noms ● Fournir des fonctions et des méthodes

Il existe d'autres fonctionnalités, mais j'en ai répertorié trois principales. Aujourd'hui, je voudrais jeter un coup d'œil à ces derniers.

Mélanger

Je ne sais pas ce que signifie être un mix-in, L'héritage multiple peut être effectué en incorporant le module dans la classe. Dans Ruby, un seul héritage de classe est possible, mais le module peut être un héritage multiple. De plus, contrairement à la classe, la même fonction peut être partagée même si elle n'a pas de relation is-a (une relation selon laquelle un objet est une instance d'une classe ou de ses descendants).

Addendum: L'explication de la relation is-a a été corrigée. Merci pour votre commentaire.

include

ruby.rb


module Hoge
  def hello
    puts 'Hello'
  end
end

module Bar
  def bye
    puts 'Bye'
  end
end

class Greet
  #Inclure le module créé ci-dessus
  include Hoge
  include Bar
end

greet = Greet.new
greet.hello #=> "Hello"
greet.bye   #=> "Bye"

En incluant comme ci-dessus, la classe peut utiliser les méthodes définies dans le module. L'ajout de fonctions en incluant des modules dans une classe de cette manière est appelé mix-in.

extend Vous pouvez utiliser extend pour transformer une méthode d'un module en méthode de classe.

ruby.rb


module Hoge
  def hello
    puts 'Hello'
  end
end

class Greet
  #Étendez le module créé ci-dessus
  extend Hoge
end

#Vous pouvez appeler hello comme méthode de classe
Greet.hello #=> "Hello"

Vous pouvez utiliser les méthodes définies dans le module avec include ou extend dans la classe comme ceci. C'est un mix-in qui est l'une des manières d'utiliser le module.

Fournir un espace de noms

Si vous écrivez une classe dans le nom du module, cela signifie une classe qui appartient au module. Vous pouvez éviter les conflits de noms.

module Bar
  class Baz
    def self.foo
      puts 'foo'
    end
  end
end

#J'ai appelé la méthode foo de la classe Baz qui appartient au module appelé Bar.
Bar::Baz.foo #=> "foo"

Ce que j'ai ressenti après avoir travaillé comme ingénieur Il existe de nombreuses possibilités d'utiliser les espaces de noms. Parce que plus le projet est gros, plus il y a de risques de conflits de noms. Nous définissons souvent les espaces de noms de cette manière pour éviter les conflits.

Définir des fonctions et des méthodes

constant

Les constantes définies dans le module peuvent être appelées via le nom du module.

ruby.rb


module Hoge
  Year = "2020"
end

Hoge::Year #=> "2020"

Méthode

Les méthodes d'instance peuvent être appelées à l'aide de la méthode module_function et en transformant la méthode en fonction de module.

ruby.rb


module Hoge
  def hello
    puts 'Hello'
  end

  module_function :hello
end

Hoge.hello #=> "Hello"

Ceci conclut le résumé des modules. C'était le 10ème jour de la sérialisation d'un ingénieur qui deviendra un ingénieur à part entière 100 jours plus tard aujourd'hui.

** 90 jours pour devenir un ingénieur à part entière **

Recommended Posts

Premiers pas avec les modules Ruby
Premiers pas avec Ruby
Premiers pas avec DBUnit
Premiers pas avec Swift
Premiers pas avec Doma-Transactions
Premiers pas avec le traitement Doma-Annotation
Premiers pas avec Java Collection
Premiers pas avec JSP et servlet
Premiers pas avec les bases de Java
Premiers pas avec Spring Boot
Premiers pas avec Java_Chapitre 5_Exercices pratiques 5_4
[Google Cloud] Premiers pas avec Docker
Premiers pas avec Docker avec VS Code
Premiers pas avec Doma-Criteria API Cheet Sheet
J'ai commencé Ruby
Premiers pas avec Docker pour Mac (installation)
Introduction au test de paramétrage dans JUnit
Introduction à Java à partir de 0 Partie 1
Premiers pas avec Ratpack (4) - Routage et contenu statique
Démarrez avec le fonctionnement de JVM GC
Premiers pas avec Language Server Protocol avec LSP4J
Premiers pas avec la création d'ensembles de ressources avec ListResoueceBundle
Premiers pas avec Java_Chapter 8_A propos des "Instances" et des "Classes"
Liens et mémos pour démarrer avec Java (pour moi-même)
Premiers pas avec Doma-Using Projection avec l'API Criteira
Premiers pas avec Java 1 Assembler des éléments similaires
Premiers pas avec Kotlin à envoyer aux développeurs Java
Premiers pas avec Doma-Using Joins avec l'API Criteira
Premiers pas avec Doma - Introduction à l'API Criteria
J'ai essayé de démarrer avec Gradle sur Heroku
Commencez avec Gradle
Evolve Eve avec Ruby
Prise en main des programmes Java à l'aide de Visual Studio Code
Premiers pas avec les anciens ingénieurs Java (Stream + Lambda)
Premiers pas avec Java et création d'un éditeur Ascii Doc avec JavaFX
J'ai essayé DI avec Ruby
Premiers pas avec Doma-Dynamic Construction de clauses WHERE avec l'API Criteria
Client GraphQL commençant par Ruby
Démarrez avec Spring Boot
Ruby: envoyer des e-mails avec Starttls
Formater Ruby avec VS Code
Comment vérifier les nombres entiers avec ruby
Prise en main de Completable Future (First Future)
[Ruby] problème avec l'instruction if
Étudier à CodeWar (ruby) ⑤ Proc
Utilisez Ruby avec Google Colab
Premiers pas avec Git Hub Container Registry au lieu de Docker Hub
[ruby] Appel d'une méthode avec un argument
Revenir au début, démarrer avec Java ② Instructions de contrôle, instructions de boucle
Résumer les principaux points de démarrage avec JPA appris avec Hibernate