---
# System prepended metadata

title: Android
tags: [LPDIM]

---

---
tags: LPDIM
title: Android
---

# TP1 --- Apprentissage Kotlin :peach: 

# Une histoire de syntaxe

:::info
**Question 1 :** 👉 Définissez la différence entre objet, orienté objet et fonctionnel ? Comment qualifie-t-on ces concepts ? Qu’est ce qu’un POJO ?
:::

---

:::success
**Objet** : un objet c'est comme on pourrait dire une instance d'une classe.

**Orientée Objet** : c'est une programmation où les programmme sont écrits et structurés autours des objets, c'est à dire des attributs.

**Fonctionnelle** :  c'est une programmmation de type déclaratif qui considère le calcul en tant qu'évaluation de fonction
:::

On qualifie ces concepts de paradigmes de programmation.

La programmation fonctionnelle est utilisée pour effectuer de nombreuses opérations différentes où les données sont fixes et consiste à avoir un modèle de programmation sans état, c'est à dire que l'état n'existe pas. La fonction est l'unité de manipulation pricipale et ses fonctions n'ont aucun impact sur le code si il s'exécute sur plusieurs processeurs.

Alors que la programmation Orienté Objet est tout le contraire. En effet, la POO est utilisée pour effectuer quelques opérations qui a un comportement commun et différentes variantes et consiste à avoir un modèle de programmation avec état, c'est à dire que l'état existe. L'objet est l'unité de manipulation principale et ses méthodes peuvent avoir un impact sur les processeurs.

:::success
**POJO :** Plain Old Java Objet
Cet acronyme est utilisé pour simplifier un maximum l'utilisation d'un objet Java.
- Il n'étend pas des classes pré-spécifiées.
- Il n'implémente pas des interfaces pré-spécifiées.
- Il ne contient pas des annotations pré-spécifiées.
:::

# Fonctionnement

## Un mot sur la JVM

:::info
**Question 2 :** 👉 Définissez la différence entre un langage interprété et un langage compilé ? Citez quelques exemples de langage.
:::

---

:::success
**Langage interprété :** Le code sources est interprété par un logiciel (interpréteur). Il va utiliser le code source et les données d'entrée pour calculer les données de sortie.

**Langage compilé :** Le code source est compilé par un logiciel (compilateur) enh un code binaire. c'est alors directement le système d'exploitation qui va utiliser le code binaire et le donnée d'entrée pour calculer les données de sortie.
:::

Dans un langage interprété, le code source peut marcher sur toutr les ordinateurs alors que le code source d'un langage compilé, il faudra à chaque fois tout recompiler (en général).
Le programme d'un langage compilé sera exécuté plus rapidement (directement exécuté sur l'ordinateur) alors que pour un programme dans un langage interprété, ce ne sera pas le cas, il sera plus lent.


    langages interprétés : Java (+ JavaScool) et Python ;
    langages compilés : C, C++, Pascal et OCaml.


# Kotlin et le typage

:::info
**Question 3 :** 👉 Définissez les points de différence entre un langage fortement typé et faiblement voire non typé ? Citez quelques exemples de langage.
:::

---

:::success
**Langage fortement typé :**  c'est lorsqu'il garantit que les types de données employés décrivent correctement les données manipulées. 

**Langage faiblement voir non typé :** 
:::

    langages fortement typé : Kotlin, ADA, Pascale, Java, C++ et C# ;
    langages faiblement voir non typé : JavaScript, OCaml, Python et PHP.

La différence entre les deux typages ce fait par rapport au type de variables ou encore de fonction. En effet, pour le typage fort, chaque déclaration de variable ou de fonction nécessite de préciser le type : comme `String`, `Var`, `integer`, `val`, `boolean`, ... Alors que pour un typage faible, ses déclarations ne nécessitent aucune précision sur le type.

# Les variables

:::info
**Question 4 :** 👉 Chercher la différence entre les deux mots clés et expliquer avec vos mots à l’enseignant.
:::

---

:::success
:point_right:  En Kotlin
**var :** c'est une variable générale que l'on peut utiliser plusieurs fois.
**val :** c'est une variable dites constante que l'on ne peux pas utiliser plusieurs fois.
:::

## Optional & Null safety  🌮

:::info
**Question 5 :** 👉 Que se passe-t’il lorsque vous compilez ?
:::

---

Lorsque je compile, j'ai une erreur : 
![](https://i.imgur.com/tTo9hcE.png)


### Comment gérer ce comportement ?

:::info
**Question 6 :** 👉 Selon vous quelle est la signature de la fonction networkCall ? Ecrivez la et faites valider par l’enseignant.
:::

---

```kotlin=
fun networkCall(): String?
```

:::info
**Question 7 :** 👉 Comment pourriez vous faire pour exécuter du code dans le cas ou la valeur de lunwrapping 🌮 est effectivement null, pour déclencher un nouvel appel réseau par exemple ? Trouvez l’opérateur adéquat et inscrivez le code d’exemple complété dans un ficher.
:::

---

L’opérateur adéquat serait : **`?:`**

```kotlin=
fun main (){
    var myNetworkResponse:String? = null
    myNetworkResponse = networkCall()
    
    myNetworkResponse?.let { responseData ->
        saveNetworkResponseToDataBase(responseData)
    } ?: run {
        println("Null Value")
    }
}

fun networkCall(): String? {
    return null
}
```

# Control flow (`if`, `for`, `when`)

:::info
**Question 8 :** 👉 Quel est l’équivalent du switch en kotlin ?
:::

---

:point_right: En Kotlin, 
l'équivalant du `switch` c'est `when`.

:bulb: Petit exemple :bulb: 

```kotlin=
when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> { // Note the block
        print("x is neither 1 nor 2")
    }
}
```

:::info
**Question 9 :** 👉 Créez un tableau de string et affichez chaque valeur dans la sortie console. Faites valider par l’enseignant.
:::

---

En Kotlin, il existe différentes façons de créer des tableau de `string`.
On peut soit donner une taille au tableau soit ne pas lui en donner:
* arrayOf() : permet de ne pas donner de taille au tableau
* Array(size) : permet de donner une taille au tableau

```kotlin=
fun main(){
    var array = arrayOf("Android", "IOS", "code", "mobile")
    array.forEach{ println(it)}
}
```



# Classes Enum

:::info
**Question 10 :** 👉 Trouvez 3 exemples de classe enum qui vous permettrait de simplifier un problème ?
:::

---

Voici les trois exemples de class enum qui me permettrait de simplifier un problème : 

```kotlin=
// une class enum sur les jours de la semaine
enum class jours {
    lundi,
    mardi,
    mercredi,
    jeudi,
    vendredi,
    samedi,
    dimanche
}

// une class enum sur les mois de l'année
enum class mois {
    janvier,
    fevrier,
    mars,
    avril,
    mai,
    juin,
    juillet,
    aout,
    septembre,
    octobre,
    novembre,
    decembre
}

// une classe enum sur les saisons
enum class saisons {
    printemps,
    ete,
    automne,
    hiver
}
```

---

Léa PORTIER - 25/01/2021.