Travailler avec des fichiers
Fait partie de la section Programmation orientée objet du Journey Ruby de Coddy. Leçon 1 sur 57.
Les programmes réels 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 à cet endroit, et uniquement la première fois : un second 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, renvoie true
require_relative 'greeting' # déjà chargé, renvoie false
puts greeting("Bo")La disposition habituelle est d’avoir une classe par fichier, le fichier portant le nom de la classe en snake_case : class Dog se trouve dans dog.rb, class BankAccount dans bank_account.rb. Dans les défis 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 dont une autre classe hérite est chargée en premier.
dog.rb # class Dog ... end
bank_account.rb # class BankAccount ... end
functions.rb # méthodes utilitaires
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 en haut d’un fichier, les classes et les constantes peuvent être utilisées par tous les fichiers chargés après celui-ci. Une variable locale n’appartient qu’à son propre fichier :
# settings.rb
limit = 3 # variable locale : seul settings.rb y a accès
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 maximum 3
puts MAX_ITEMS # 3
# puts limit # NameError: undefined local variableDéfi
FacileLe programme comporte deux fichiers. main.rb charge greeting.rb, lit les noms et affiche le résultat de greeting(name). Complète greeting dans greeting.rb afin qu’elle renvoie Hello, Ada! pour le nom Ada, ou Hello, friend! lorsque le nom est vide.
Ton code va dans greeting.rb. main.rb contient le code fourni pour l’entrée/sortie et ne peut pas être modifié.
Essayez vous-même
require_relative 'greeting'
# Code d'entrée/sortie fourni : conservez-le 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