namespace: les modules sont des namespaces ... qui n'existent pas en java;)
Je suis également passé de Java et python à Ruby, je me souviens que j'avais exactement cette même question ...
La réponse la plus simple est donc que le module est un espace de noms, qui n'existe pas en Java. En java, l'état d'esprit le plus proche de l'espace de noms est un package .
Donc, un module en rubis est comme quoi en java:
classe? Pas d'
interface? Pas de
classe abstraite? Pas de
colis? Oui peut-être)
méthodes statiques à l'intérieur des classes en java: identiques aux méthodes à l'intérieur des modules en ruby
En java, l'unité minimale est une classe, vous ne pouvez pas avoir de fonction en dehors d'une classe. Cependant en rubis c'est possible (comme python).
Alors, qu'est-ce qui entre dans un module?
classes, méthodes, constantes. Le module les protège sous cet espace de noms.
Aucune instance: les modules ne peuvent pas être utilisés pour créer des instances
Ins mixtes: parfois, les modèles d'héritage ne sont pas bons pour les classes, mais en termes de fonctionnalités, vous voulez regrouper un ensemble de classes / méthodes / constantes ensemble
Règles concernant les modules dans ruby:
- Les noms des modules sont UpperCamelCase
- les constantes dans les modules sont ALL CAPS (cette règle est la même pour toutes les constantes ruby, non spécifiques aux modules)
- méthodes d'accès: utilisation. opérateur
- constantes d'accès: use :: symbol
exemple simple d'un module:
module MySampleModule
CONST1 = "some constant"
def self.method_one(arg1)
arg1 + 2
end
end
comment utiliser les méthodes à l'intérieur d'un module:
puts MySampleModule.method_one(1) # prints: 3
comment utiliser les constantes d'un module:
puts MySampleModule::CONST1 # prints: some constant
Quelques autres conventions sur les modules:
utilisez un module dans un fichier (comme les classes ruby, une classe par fichier ruby)