Lasagnes

Lasagnes

Exercice d'apprentissage

Introduction

L'ensemble du parcours Julia te demandera de traiter ta solution comme une petite bibliothèque, c'est-à-dire que tu devras définir des fonctions, des types, etc. qui seront ensuite exécutés par une suite de tests. C'est pour cette raison que l'on commencera par présenter les fonctions nommées, qui seront le tout premier concept.

Julia est un langage de programmation dynamique et fortement typé. Le style de programmation est essentiellement fonctionnel, mais avec plus de souplesse que dans des langages comme Haskell.

Variables et affectation

Il n'est pas nécessaire de déclarer une variable à l'avance. Il suffit d'affecter une valeur à un nom approprié :

julia> myvar = 42  # an integer
42

julia> name = "Maria"  # strings are surrounded by double-quotes ""
"Maria"

Constantes

Si une valeur doit être disponible dans tout le programme, mais n'est pas censée changer, il vaut mieux la marquer comme constante.

Faire précéder une affectation du mot-clé const permet au compilateur de générer du code plus efficace que ce qui est possible pour une variable.

Les constantes t'aident aussi à te protéger contre les erreurs de codage. Si tu essaies de modifier la valeur const par accident, tu obtiendras un avertissement :

julia> const answer = 42
42

julia> answer = 24
WARNING: redefinition of constant Main.answer. This may fail, cause incorrect answers, or produce other errors.
24

Note qu'une const ne peut être déclarée qu'en dehors de toute fonction. Elle se trouvera généralement près du début du fichier *.jl, avant les définitions de fonctions.

Opérateurs arithmétiques

Ce sont les mêmes que dans beaucoup d'autres langages :

2 + 3  # 5 (addition)
2 - 3  # -1 (subtraction)
2 * 3  # 6 (multiplication)
8 / 2  # 4.0 (division with floating-point result)
8 % 3  # 2 (remainder)

Fonctions

Il y a deux façons courantes de définir une fonction nommée en Julia :

  1. En utilisant le mot-clé function

    function muladd(x, y, z)
        x * y + z
    end
    

    Une indentation de 4 espaces est la convention de lisibilité, mais le compilateur l'ignore. Le mot-clé end est indispensable.

    Note que l'on aurait pu écrire return x * y + z. Cependant, les fonctions Julia renvoient toujours la dernière expression évaluée, donc le mot-clé return est facultatif. Beaucoup de programmeurs préfèrent l'inclure pour rendre leurs intentions plus explicites.

  2. En utilisant la « forme d'affectation »

    muladd(x, y, z) = x * y + z
    

    On l'utilise le plus souvent pour écrire des fonctions concises à une seule expression.

    Le mot-clé return n'est jamais utilisé dans la forme d'affectation.

Les deux formes sont équivalentes et s'utilisent exactement de la même manière, alors choisis celle qui te semble la plus lisible.

Pour appeler une fonction, on indique son nom et on passe des arguments pour chacun de ses paramètres :

# invoking a function
muladd(10, 5, 1)

# and of course you can invoke a function within the body of another function:
square_plus_one(x) = muladd(x, x, 1)

Conventions de nommage

Comme beaucoup de langages, Julia exige que les noms (de variables, de fonctions et de bien d'autres choses) commencent par une lettre, suivie de n'importe quelle combinaison de lettres, de chiffres et de tirets bas.

Par convention, les noms de variables, de constantes et de fonctions s'écrivent en minuscules, avec un minimum raisonnable de tirets bas.

Instructions

Dans cet exercice, tu vas écrire du code pour t'aider à cuisiner une excellente lasagne, tirée de ton livre de cuisine préféré.

Il y a quatre tâches, toutes liées au temps passé à cuisiner la lasagne.

1. Stocke le temps de cuisson prévu dans une constante

Définis la constante expected_bake_time, qui renvoie le nombre de minutes pendant lesquelles la lasagne doit cuire au four.

D'après le livre de cuisine, la lasagne doit rester au four pendant 60 minutes en tout.

julia> expected_bake_time
60

2. Calcule le temps de préparation en minutes

Définis la fonction preparation_time qui prend en argument le nombre de couches que tu as ajoutées à la lasagne et renvoie le nombre de minutes que tu as passées à préparer la lasagne, en supposant qu'il te faut 2 minutes pour préparer chaque couche.

julia> preparation_time(4)
8

3. Calcule le temps de cuisson restant en minutes

Définis la fonction remaining_time qui prend en paramètre le nombre de minutes que la lasagne a déjà passées au four et renvoie le nombre de minutes qu'elle doit encore y rester.

julia> remaining_time(50)
10

4. Calcule le temps de travail total en minutes

Définis la fonction total_working_time qui prend deux arguments : le premier argument est le nombre de couches que tu as ajoutées à la lasagne, et le second est le nombre de minutes que la lasagne a passées au four.

La fonction doit renvoyer le nombre total de minutes que tu as consacrées à la cuisson de la lasagne, c'est-à-dire la somme du temps de préparation en minutes et du temps en minutes que la lasagne a passé au four jusqu'à présent.

julia> total_working_time(3, 20)
26
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Julia Exercism

Prêt à commencer Lasagnes ?

Inscris-toi sur Exercism pour apprendre et maîtriser Julia avec 35 concepts128 exercices, et un vrai mentorat humain, le tout gratuitement.