0% ont trouvé ce document utile (0 vote)
56 vues46 pages

Les Fonctions

La leçon 2 aborde les fonctions en Kotlin, y compris leur création, l'utilisation de paramètres, et les fonctions d'ordre supérieur. Elle explique également les filtres de listes et les différences entre l'évaluation avide et paresseuse. Enfin, des exemples pratiques illustrent comment utiliser des lambdas et des fonctions compactes pour améliorer la lisibilité du code.

Transféré par

soltani
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
56 vues46 pages

Les Fonctions

La leçon 2 aborde les fonctions en Kotlin, y compris leur création, l'utilisation de paramètres, et les fonctions d'ordre supérieur. Elle explique également les filtres de listes et les différences entre l'évaluation avide et paresseuse. Enfin, des exemples pratiques illustrent comment utiliser des lambdas et des fonctions compactes pour améliorer la lisibilité du code.

Transféré par

soltani
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Leçon 2: Les

fonctions

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 1


Plan
Leçon 2: Les fonctions
○ Programmes Kotlin
○ (Presque) tout a une valeur
○ Fonctions en Kotlin
○ Fonctions compactes
○ Lambdas et fonctions d'ordre supérieur
○ Filtres de listes
○ Récapitulatif

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 2


Programmes Kotlin

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 3


Mise en place
Pour écrire du code et exécuter des programmes, Il faut :

● Créer un fichier dans le projet


● Créer la fonction main()
● Fournir des arguments à main()(Optionnel)
● Utilisez les arguments passés lors des appels de fonctions
(Optionnel)
● Exécuter le programme
This work is licensed under the Apache 2 license.
Apache 2 license

Développement Android avec Kotlin 4


Créer un nouveau fichier Kotlin
Dans le panneau Projet d'IntelliJ IDEA, sous Hello World, faites un clic droit sur le
dossier src.
● Selectionner New > Kotlin File/Class.
● Selectionner File, nommer le fichier Hello, et cliquer sur Enter.

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 5


Créer un fichier Kotlin
Un fichier [Link] est créé dans le dossier src.

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 6


Création de la fonction main()
main() est le point d’entrée pour l’exécution d’un programme Kotlin.

Dans le fichier [Link] :


fun main(args: Array<String>) {
println("Hello, world!")
}

Les arguments de la fonction main()sont optionnels.

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 7


Exécuter un programme Kotlin
Pour exécuter un programme, il suffit de cliquer sur l’icône ( ) à gauche de
main().

IntelliJ IDEA runs the program, and displays the results in the console.

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 8


Fournir des arguments à main()

Selectionner Run > Edit Configurations pour ouvrir la fenêtre Run/Debug


Configurations.

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 9


Utiliser des arguments pour main()

Utiliser args[0] pour accéder au premier paramètre fourni à main().

fun main(args: Array<String>) {


println("Hello, ${args[0]}")
}

⇒ Hello, Kotlin!

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 10


(Presque) tout a une valeur

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 11


(Presque) Tout est expression

En Kotlin, presque tout est une expression et a une valeur. Même une expression
if a une valeur.

val temperature = 20
val isHot = if (temperature > 40) true else false
println(isHot)
⇒ false

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 12


Valeurs d’expression

Parfois, la valeur d’une expression est [Link].

val isUnit = println("Ceci est une expression")


println(isUnit)

⇒ Ceci est une expression


[Link]

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 13


Fonctions en Kotlin

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 14


A propos des fonctions

● Un bloc de code qui exécute une tâche spécifique.

● Divise un programme en petits modules.

● Déclarée en utilisant le mot-clef fun

● Peut accepter des arguments avec des valeurs nommées


ou par défaut.

15
This work is licensed under the Apache 2 license.
Apache 2 license

Développement Android avec Kotlin


Les parties d'une fonction

Fonction qui affiche "Hello World".

fun printHello() {
println("Hello World")
}

printHello()

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 16


Fonctions retournant Unit

Si une fonction ne renvoie aucune valeur utile, son type de retour est Unit.

fun printHello(name: String?): Unit {


println("Hi there!")
}

Unit est un type avec une valeur unique : Unit.

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 17


Fonctions retournant Unit
La déclaration du type de retour Unit est optionnelle.
fun printHello(name: String?): Unit {
println("Bonjour tout le monde!")
}

Est équivalent à :

fun printHello(name: String?) {


println("Bonjour tout le monde!")
}

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 18


Les arguments de fonction

Une fonction peut avoir :

● Des paramètres par défaut


● Des paramètres requis
● Des paramètres nommés

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 19


Paramètres par défaut
Les valeurs par défaut fournissent une alternative si aucune valeur de paramètre
n'est passée.
fun drive(speed: String = "fast") {
println("driving $speed")
}
Utiliser "=" après le type pour
définir des valeurs par défaut
drive() ⇒ driving fast
drive("slowly") ⇒ driving slowly
drive(speed = "turtle-like") ⇒ driving turtle-like

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 20


Paramètres requis

Si aucune valeur par défaut n'est spécifiée pour un paramètre, l'argument


correspondant est requis.
Paramètres requis

fun tempToday(day: String, temp: Int) {


println("Today is $day and it's $temp degrees.")
}

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 21


Paramètres par défaut vs paramètres requis

Les fonctions peuvent avoir un mélange de paramètres par défaut et de


paramètres requis.
fun reformat(str: String,
divideByCamelHumps: Boolean,
wordSeparator: Char, A une valeur par
normalizeCase: Boolean = true){ défaut

Passez les arguments requis.

reformat("Aujourd'hui est un jour différent.", false, '_')

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 22


Arguments nommés

Pour améliorer la lisibilité, utilisez des arguments nommés pour les arguments
requis.
reformat(str, divideByCamelHumps = false, wordSeparator = '_')

Il est conseillé de placer les arguments par défaut après les arguments
positionnels, afin que les appelants n'aient qu'à spécifier les arguments requis.

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 23


Fonctions compactes

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 24


Fonctions à expression unique

Les fonctions compactes, ou fonctions à expression unique, rendent votre code


plus concis et lisible.

fun double(x: Int): Int { Version complète


x * 2
}

fun double(x: Int):Int = x * 2 Version compacte

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 25


Les lambdas et les fonctions
d'ordre supérieur

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 26


Les fonctions en Kotlin sont de première classe

● Les fonctions en Kotlin peuvent être stockées dans des


variables et des structures de données.
● Elles peuvent être passées en tant qu'arguments à d'autres
fonctions d'ordre supérieur et en être retournées.
● Vous pouvez utiliser des fonctions d'ordre supérieur pour créer
de nouvelles fonctions "intégrées« (built-in).

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 27


Fonctions Lambda
Lambda est une expression qui crée une fonction sans nom.

Paramètres et type
Flèche de
var dirtLevel = 20 fonction
val waterFilter = {level: Int -> level / 2}
println(waterFilter(dirtLevel))
⇒ 10 Code à exécuter

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 28


Syntaxe pour les types de fonction
La syntaxe de Kotlin pour les types de fonction est étroitement liée à sa syntaxe
pour les lambdas. Déclarer une variable qui contient une fonction.

val waterFilter: (Int) -> Int = {level -> level / 2}

Nom de variable Type de données de la fonction


variable
(type de fonction)

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 29


Les fonctions d'ordre supérieur
Les fonctions d'ordre supérieur prennent des fonctions en paramètres ou
renvoient une fonction.

fun encodeMsg(msg: String, encode: (String) -> String): String {​


return encode(msg)
}

Le corps du code appelle la fonction qui a été passée comme deuxième argument
et lui transmet le premier argument.

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 30


Les fonctions d'ordre supérieur
Pour appeler cette fonction, Il faut passer une chaîne de caractères et une fonction.

val enc1: (String) -> String = { input -> [Link]() }


println(encodeMsg("abc", enc1))

L'utilisation d'un type de fonction sépare son implémentation de son utilisation.

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 31


Passage d'une référence de fonction
L'opérateur :: permet de passer une fonction nommée en tant qu'argument à une
autre fonction.
fun enc2(input:String): String = [Link]()
encodeMessage("abc", ::enc2) Passer une fonction nommée
non une lambda

L'opérateur :: indique à Kotlin que vous passez la référence de la fonction en tant


qu'argument, et que vous n'essayez pas d'appeler la fonction.

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 32


Syntaxe d'appel du dernier paramètre

Kotlin préfère que tout paramètre prenant une fonction soit le dernier paramètre.

encodeMessage("acronym", { input -> [Link]() })

Il est possible de passer une lambda en tant que paramètre de fonction sans
l'inclure à l'intérieur des parenthèses.

encodeMsg("acronym") { input -> [Link]() }

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 33


Utilisation des fonctions d'ordre supérieur

De nombreuses fonctions prédéfinies de Kotlin sont définies en utilisant la


syntaxe d'appel du dernier paramètre.
inline fun repeat(times: Int, action: (Int) -> Unit)

repeat(3) {
println("Hello")
}

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 34


Filtres de listes

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 35


Filtres de listes
Obtenir une partie d'une liste en fonction d'une certaine condition.

bright
red red-orange dark red orange saffron
orange

Appliquer filter() dans une liste


Condition: Tout élément contenant
“red”
red red-orange dark red

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 36


Itération à travers les listes
Si une fonction n'a qu'un seul paramètre, vous pouvez omettre sa déclaration et
le "->". Le paramètre est implicitement déclaré sous le nom it.

val ints = listOf(1, 2, 3)


[Link] { it > 0 }

Filter itère à travers une collection, où it est la valeur de l'élément lors de


l'itération. Cela équivaut à :

[Link] { n: Int -> n > 0 } OR [Link] { n -> n > 0 }

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 37


Filtres de listes

La condition du filtre entre accolades{} teste chaque élément pendant la boucle


du filtre. Si l'expression renvoie true l'élément est inclus.

val books = listOf("nature", "biology", "birds")


println([Link] { it[0] == 'b' })
⇒ [biology, birds]

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 38


Filtres avides et paresseux
Évaluation des expressions dans les listes :

● Avide : Se produit indépendamment du fait que le résultat soit


utilisé ou non.
● Paresseuse : Se produit uniquement si nécessaire à
l'exécution.
L'évaluation paresseuse des listes est utile si vous n'avez pas besoin de
l'ensemble du résultat, ou si la liste est exceptionnellement grande et que
plusieurs copies ne peuvent pas tenir en RAM.

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 39


Filtres avides
Les filtres sont avides par défaut. Une nouvelle liste est créée chaque fois que
vous utilisez un filtre.

val instruments = listOf("viola", "cello", "violin")


val eager = [Link] { it [0] == 'v' }
println("eager: " + eager)
⇒ eager: [viola, violin]

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 40


Filtres paresseux

Les séquences sont des structures de données qui utilisent l'évaluation


paresseuse et peuvent être utilisées avec des filtres pour les rendre paresseux.

val instruments = listOf("viola", "cello", "violin")


val filtered = [Link]().filter { it[0] == 'v'}
println("filtered: " + filtered)

⇒ filtered: [Link]@386cc1c4

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 41


Séquences -> listes

Les séquences peuvent être converties en listes en utilisant toList().

val filtered = [Link]().filter { it[0] == 'v'}


val newList = [Link]()
println("new list: " + newList)

⇒ new list: [viola, violin]

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 42


Autres transformations de listes
● map() Effectue la même transformation sur chaque élément et renvoie la liste.

val numbers = setOf(1, 2, 3)


println([Link] { it * 3 })
=> [3, 6, 9]

● flatten() Renvoie une seule liste contenant tous les éléments des
collections imbriquées.
val numberSets = listOf(setOf(1, 2, 3), setOf(4, 5), setOf(1, 2))
println([Link]())
=> [1, 2, 3, 4, 5, 1, 2]

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 43


Récapitulatif

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 44


Récapitulatif
Dans la leçon 2, vous avez appris comment :
● Créer un fichier et la fonction main() et exécuter le programme
● Passer des arguments à la fonction main()
● Utiliser la valeur de retour d’une expression
● Utiliser des arguments par défaut pour les fonctions
● Utiliser des fonctions compactes pour rendre le code plus lisible
● Utiliser des lambdas et des fonctions d'ordre supérieur
● Utiliser des filtres de liste avides (eager) et paresseux (lazy)

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 45


Parcours

Pratiquez ce que vous avez appris en complétant le


parcours:
Leçon 2: Fonctions

This work is licensed under the Apache 2 license.


Apache 2 license

Développement Android avec Kotlin 46

Vous aimerez peut-être aussi