# 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