Giter Club home page Giter Club logo

lawnmowers-scala's Introduction

Projet AL

Pré-requis

Il est indispensable d'avoir installé en local:

  • la version 2.13 du compilateur Scala, ici

  • le gestionnaire de build sbt, voir ici. En installant sbt, le compilateur sera installé aussi.

Structure du projet

Ceci est le projet de validation du cours d'initiation à la programmation fonctionnelle. Le code source doit être écrit dans le répertoire ./src/main/scala. Vous pourrez créer autant de package que vous voulez. Les tests unitaires doivent être écrit dans le répertoire ./src/test/scala. Pour écrire des tests unitaires, veuillez vous reporter à la section Tests Unitaires.

Guide de survie avec sbt

Ce projet est un application Scala standalone. Il est géré par sbt, le build tool Scala. Sa documentation est disponible ici.

Nous allons lister ici une liste de commandes utiles avec sbt:

  • sbt: cette commande lance un invite de commande interactif

  • run (ou sbt run hors de l'invite de commande): lance la classe Main du projet sbt

  • compile (ou sbt compile hors de l'invite de commande): lance la compilation de l'ensemble du projet sbt (compile toutes les classes)

  • console (sbt console hors de l'invite de commande): lance un REPL interactif Scala. Les dépendances du projet sbt seront disponibles et pourront être importés.

Manipulation de fichiers

Nous allons voir ici quelques commandes pour vous aider avec la manipulation de fichiers en Scala.

Pour lire un fichier nous pouvons le faire comme suit (en utilisant la lib better-files):

import better.files._

val f = File("/User/johndoe/Documents") // using constructor

// on va récupérer toutes les lignes du fichier
f.lines.toList

// si on veut récupérer tout le contenu du fichier en String
f.contentAsString

Pour écrire dans un fichier, nous pouvons le faire ainsi:

import better.files._

val f = File("/User/johndoe/Documents") // using constructor

// pour ajouter du contenu dans un fichier ligne par ligne
f.createIfNotExists()
  .appendLine() // on rajoute une ligne vide
  .appendLines("My name is", "Inigo Montoya") // on ajoute 2 nouvelles lignes

// pour écraser le contenu du fichier
f.createIfNotExists().overwrite("hello")

Tests unitaires

Il est possible de lancer tous les tests du projets avec la commande: sbt test (ou test si on est dans l'invite de commande sbt).

Pour créer une classe de test, il suffit de créer une classe étendant org.scalatest.funsuite.AnyFunSuite:

import org.scalatest.funsuite.AnyFunSuite

class HelloSpec extends AnyFunSuite {}

Les tests devant être lancés doivent être placés dans le corps de la classe. Pour créer un test, il suffit d'appeler test en lui passant un nom de test et le code de test à effectuer comme ceci:

import org.scalatest.funsuite.AnyFunSuite

class HelloSpec extends AnyFunSuite {
  test("The Hello object should say hello") {
    assert(Hello.greeting === "hello")
  }
}

Le test sera lancé dès lorsqu'on lancera la commande test:

sbt:funprog-AL> test
[info] Formatting 1 Scala sources...
[info] compiling 1 Scala source to ../projet/funprog-al/target/scala-2.13/test-classes ...
[info] HelloSpec:
[info] - The Hello object should say hello
[info] Run completed in 251 milliseconds.
[info] Total number of tests run: 1
[info] Suites: completed 1, aborted 0
[info] Tests: succeeded 1, failed 0, canceled 0, ignored 0, pending 0
[info] All tests passed.
[success] Total time: 1 s, completed 14 nov. 2021 à 14:46:48

Une classe de test d'exemple vous est fourni dans ./src/test/example/HelloSpec.scala.

Lecture des fichiers de conf

La librairie config a été rajouté au projet. Elle permet de lire les fichiers de configuration (au format .conf). Un fichier de configuration a été ajouté au projet (voir le fichier ./src/main/resources/application.conf).

Voici un exemple d'utilisation de l'api config (tiré de la documentation officielle).

Pour le fichier application.conf suivant:

foo {
  bar = 1
}

foo1.baz = "some texte"
foo1.baz = ${?FOO1_BAZ} # variable d'environnement pour sucharger la conf

La lecture du fichier de conf se fera comme suit:

import com.typesafe.config.{Config, ConfigFactory}

// Pour charger la configuration. `ConfigFactory#load` va chercher et lire le fichier `application.conf`.
val conf: Config = ConfigFactory.load()

// Une fois le fichier de conf chargé, on peut récupéré une valeur par sa clé (ex: `foo.bar`).
val bar1: Int = conf.getInt("foo.bar")
val foo: Config = conf.getConfig("foo")
val bar2: Int = foo.getInt("bar")
val baz: String = conf.getString("foo1.baz")

lawnmowers-scala's People

Contributors

ohmushi avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.