Travailler avec des fichiers
Fait partie de la section Programmation orientée objet du Journey Ruby de Coddy. Leçon 1 sur 57.
Les vrais programmes sont répartis dans plusieurs fichiers. Un fichier Ruby en charge un autre avec require_relative, suivi du chemin du fichier relatif au fichier actuel, généralement sans l’extension .rb. Après cette ligne, les méthodes et les classes du fichier chargé peuvent être utilisées :
# greeting.rb
def greeting(name)
"Hello, #{name}!"
end
# main.rb
require_relative 'greeting'
puts greeting("Ada")L’exécution de ruby main.rb affiche Hello, Ada! : main.rb charge greeting.rb, puis appelle sa méthode.
Le programme démarre dans le fichier que vous exécutez, ici main.rb, et Ruby l’exécute de haut en bas. require_relative exécute l’autre fichier à ce moment-là, et uniquement la première fois : un deuxième require_relative 'greeting' renvoie false et ne fait rien. Un nom ne peut être utilisé qu’après le chargement du fichier qui le définit :
# main.rb
# puts greeting("Bo") # NoMethodError: greeting.rb n'est pas encore chargé
require_relative 'greeting' # exécute greeting.rb, retourne true
require_relative 'greeting' # déjà chargé, retourne false
puts greeting("Bo")L’organisation habituelle consiste à avoir une classe par fichier, le fichier étant nommé d’après la classe en snake_case : class Dog se trouve dans dog.rb, et class BankAccount dans bank_account.rb. Dans les exercices de cette section, main.rb contient le code d’entrée/sortie fourni et commence par une ligne require_relative par fichier, dans l’ordre de chargement : une classe sur laquelle une autre classe s’appuie est chargée en premier.
dog.rb # class Dog ... end
bank_account.rb # class BankAccount ... end
functions.rb # méthodes d'aide
main.rb # lignes require_relative, puis le code d'entrée/sortieCe qu’un fichier partage dépend du type de nom. Les méthodes définies avec def au début d’un fichier, ainsi que les classes et les constantes, peuvent être utilisées par chaque fichier chargé après lui. Une variable locale appartient uniquement à son propre fichier :
# settings.rb
limit = 3 # variable locale : seul settings.rb la voit
MAX_ITEMS = 3 # constante : visible après le chargement
def limit_text
"at most #{MAX_ITEMS}"
end
# main.rb
require_relative 'settings'
puts limit_text # au plus 3
puts MAX_ITEMS # 3
# puts limit # NameError: variable locale non définieDéfi
FacileLe programme comporte deux fichiers. main.rb charge greeting.rb, lit les noms et affiche le résultat de greeting(name). Complétez greeting dans greeting.rb afin qu’il renvoie Hello, Ada! pour le nom Ada, ou Hello, friend! lorsque le nom est vide.
Votre code doit être placé dans greeting.rb. main.rb contient le code d’entrée/sortie fourni et ne peut pas être modifié.
Essayez vous-même
require_relative 'greeting'
# Code d'entrée/sortie fourni : le garder tel quel
input = []
while (line = gets)
input << line.chomp
end
input.each { |name| puts greeting(name) }
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation orientée objet
1Classes et objets
Travailler avec des fichiersDéfinir des classesVariables d’instanceMéthodes et selfto_s et inspectRécapitulatif - Carte de bibliothèque4Encapsulation
Méthodes privéesMéthodes protégéesSetters privésProtéger l’étatRécapitulatif - Distributeur automatique7Polymorphisme et typage canard
PolymorphismeTypage canardMéthodes abstraitesCas et classesRécapitulatif - méthodes de paiement10Patrons de conception – Partie 2
Délégation avec ForwardablePatron DécorateurPatron BuilderPatron État2Accesseurs et self
Lecteurs et écrivainsSetters personnalisésself dans les méthodesIdentité et égalitéRécapitulatif - Liste de contacts5Héritage
Sous-classesRedéfinition des méthodesAppeler superis_a? et ancêtresRécapitulatif - Paie du personnel8Méthodes spéciales
Égalité et hachageMéthodes d’opérateursIndexation et ajoutCollections personnaliséesRécapitulatif - Fractions11Projet : Gestion de bibliothèque
Livres et membresEmprunter des livresEntraînez-vous par vous-même : Compilateur Ruby en ligne