---
# System prepended metadata

title: Kotlin

---

# Kotlin


> **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 ?


* **fonctionnel :** 100% fonctionnel
* **objet :** 100% objet, même les operateurs par exemple
* **orienté objet :** Pas que objet

Il s'agit de different paradigme de programmation

**POJO :** plain old Java object (bon vieil objet Java)
*un POJO est un objet Java lié à aucune autre restriction que cellesforcées par la spécification du langage Java*


---

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

* **langage interprété :** L’interpréteur se charge de traduire le code humain vers du code machine en temps réel *(PHP, javascript)*

* **Les langages compilés :** Les langages compilés sont directement transformés en code machine après l’écriture, autrement dit, on passe d’un code lisible par un humain à du binaire. *(C, C++, C#)*


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

**fortement typé :** lorsqu'il garantit que les types de données employés décrivent correctement les données manipulées (java, C#)

**Langages faiblement typés :** langages qui n'attachent pas une grande importance au typage. (PHP, Python)

---

> **Question 4** 👉 Chercher la différence entre les deux mots clés (val et var) et expliquer avec vos mots à l’enseignant.

* **val :** val est comme la variable "final" et elle est connue comme immuable dans kotlin et ne peut être initialisée qu'une seule fois.

* **var :** var est comme une variable générale et elle est connue comme une variable mutable dans kotlin et peut être assignée plusieurs fois.

---

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

La compilation va trouver l'erreur et s'arrêter

---

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

 ```Kotline
 fun networkCall(): String? {}
 ```

---

> **Question 7** 👉 Comment pourriez vous faire pour exécuter du code dans le cas ou la valeur de l unwrapping 🌮 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.

?:let

Ex: `val l = b?.length ?: -1`

---

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

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

---

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

```Kotlin
val nameArray = arrayOf("Nathan", "Loïc", "Baptiste", "Guillian");
for(word in nameArray) { println(word) }
```

ou 

```Kotlin
val myStringArray = Array(5) { i -> (i * i).toString() }
myStringArray.forEach { println(it) }
```


---

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

```kotlin
enum class GAME {
    LOBBY,
    START,
    END
}

enum Element {
    HYDROGEN,
    HELIUM
}

enum class CONSOLE {
    XBOX_ONE,
    PS4,
    PS5
}
```

---

> **Question 11** 👉 Codez un programme faisant l’usage d’un singleton, en utilisant le mot-clé approprié.

```kotlin

object Singleton{
    
    init {
        println("Singleton class invoked.")
    }
    var variableName = "I am Var"
    fun printVarName(){
        println(variableName)
    }

}

fun main() {     
    Singleton.printVarName()
    Singleton.variableName = "New Name"
        
    var a = A()
}

class A {

    init {
        println("Class init method. Singleton variableName property : ${Singleton.variableName}")
        Singleton.printVarName()
    }
}

```

**output :**
Singleton class invoked.
I am Var
Class init method. Singleton variableName property : New Name
New Name