Menu
CoddyTech

Travailler avec les fichiers

Fait partie de la section Programmation orientée objet du Journey R de Coddy. Leçon 1 sur 57.

Les programmes réels sont répartis dans plusieurs fichiers. En R, source("Greeting.R") exécute un autre fichier de haut en bas, et toutes les fonctions définies dans ce fichier sont disponibles ensuite :

# Greeting.R
greeting <- function(name) {
  paste0("Hello, ", name, "!")
}

# main.R
source("Greeting.R")
cat(greeting("Ada"), "\n")

L’exécution de main.R affiche Hello, Ada! : la ligne source() charge greeting() avant que main.R ne l’appelle.

Le programme démarre dans le fichier que vous exécutez, ici main.R, et R le lit ligne par ligne. L’ordre compte : une fonction existe seulement après que le fichier qui la définit a été chargé avec source(). Les lignes source() doivent donc se trouver en haut :

# main.R
cat(greeting("Ada"), "\n")   # Erreur : fonction "greeting" introuvable
source("Greeting.R")
cat(greeting("Ada"), "\n")   # fonctionne : greeting() existe maintenant

La disposition habituelle consiste à avoir une classe par fichier, nommé d’après la classe : Account.R contient le constructeur account et ses méthodes, Shape.R contient les génériques shape. Dans les défis de cette section, ton code va dans ces fichiers, et main.R contient le code d’entrée/sortie fourni, avec les lignes source() déjà placées en haut, dans le bon ordre. L’éditeur affiche chaque fichier sous forme d’onglet.

Shape.R      # fonctions génériques communes à toutes les formes : charger ce fichier en premier
Circle.R     # la classe du cercle et ses méthodes
main.R       # source("Shape.R"); source("Circle.R"); lit les données d’entrée et affiche les résultats

source() exécute un fichier dans l’environnement global, donc ses fonctions et ses variables deviennent des noms globaux. R ne possède pas de noms privés à un fichier : si deux fichiers définissent helper(), c’est celui du dernier fichier sourcé qui l’emporte. Une valeur seule sur sa ligne dans un fichier sourcé n’est pas non plus affichée ; les fichiers qui doivent afficher quelque chose appellent donc cat() :

# Tools.R
total <- 0                 # une variable globale une fois le fichier chargé
42                         # non affiché par source()
helper <- function(x) x * 2

# Other.R
helper <- function(x) x + 1   # chargé plus tard : remplace le helper ci-dessus
challenge icon

Défi

Facile

Le programme comporte deux fichiers. main.R charge Greeting.R, lit des noms et affiche le résultat de greeting(name) pour chacun. Complète greeting() dans Greeting.R pour qu’elle renvoie Hello, Ada! pour le nom Ada, ou Hello, friend! lorsque le nom est vide.

Ton code doit se trouver dans Greeting.R. main.R contient le code d’entrée/sortie fourni et ne peut pas être modifié.

Essayez vous-même

source("Greeting.R")

# Code d'entrée/sortie fourni : conservez-le tel quel
input <- suppressWarnings(readLines(file("stdin")))
for (name in input) cat(greeting(name), "\n", sep = "")
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Compilateur R en ligne