Menu
Coddy logo textTech

Travailler avec les fichiers

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

Les vrais programmes sont répartis entre plusieurs fichiers. En R, source("Greeting.R") exécute un autre fichier de haut en bas, et chaque fonction définie par ce fichier est ensuite disponible :

# 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 commence dans le fichier que vous exécutez, ici main.R, et R le lit ligne par ligne. L’ordre compte : une fonction n’existe qu’après que le fichier qui la définit a été chargé, les lignes source() doivent donc se trouver en haut :

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

La structure habituelle est une classe par fichier, nommée 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 exercices de cette section, votre 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      # génériques partagés par chaque forme : sourcez-le en premier
Circle.R     # la classe circle et ses méthodes
main.R       # source("Shape.R"); source("Circle.R"); lit l'entrée, imprime les résultats

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

# Tools.R
total <- 0                 # une variable globale une fois sourcée
42                         # non imprimé par source()
helper <- function(x) x * 2

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

Défi

Facile

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

Votre 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 : le laisser 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