[{"data":1,"prerenderedAt":1232},["ShallowReactive",2],{"page-\u002Fkotlin\u002Fcollections-et-lambdas":3,"pieces-kotlin":1189,"autour-\u002Fkotlin\u002Fcollections-et-lambdas":1214,"prerequis-\u002Fkotlin\u002Fcollections-et-lambdas":1219,"plan-kotlin":1221},{"id":4,"title":5,"body":6,"description":1163,"extension":1164,"ligne":124,"meta":1165,"motsCles":1166,"navigation":248,"niveau":1167,"path":1168,"prerequis":1169,"ressources":1171,"seo":1183,"sources":1184,"stem":1187,"__hash__":1188},"docs\u002Fkotlin\u002F05.collections-et-lambdas.md","Collections et lambdas",{"type":7,"value":8,"toc":1149},"minimark",[9,14,47,51,60,119,295,317,321,414,432,435,439,471,477,481,533,543,553,558,636,647,651,754,765,776,779,783,786,954,957,963,967,1074,1090,1094,1145],[10,11,13],"h2",{"id":12},"ce-que-tu-vas-apprendre","Ce que tu vas apprendre",[15,16,17,34,37],"ul",{},[18,19,20,21,25,26,29,30,33],"li",{},"Distinguer ",[22,23,24],"code",{},"List",", ",[22,27,28],{},"Set"," et ",[22,31,32],{},"Map",", en lecture seule ou modifiables.",[18,35,36],{},"Écrire une lambda et la passer à une fonction.",[18,38,39,40,29,43,46],{},"Transformer une liste avec ",[22,41,42],{},"filter",[22,44,45],{},"map",".",[10,48,50],{"id":49},"trois-types-de-collections","Trois types de collections",[52,53,54,55,59],"p",{},"Une ",[56,57,58],"strong",{},"collection"," regroupe plusieurs valeurs. Kotlin en propose trois principales.",[61,62,63,79],"table",{},[64,65,66],"thead",{},[67,68,69,73,76],"tr",{},[70,71,72],"th",{},"Type",[70,74,75],{},"Contenu",[70,77,78],{},"Doublons",[80,81,82,95,107],"tbody",{},[67,83,84,89,92],{},[85,86,87],"td",{},[22,88,24],{},[85,90,91],{},"Éléments ordonnés, accessibles par position",[85,93,94],{},"Oui",[67,96,97,101,104],{},[85,98,99],{},[22,100,28],{},[85,102,103],{},"Éléments uniques",[85,105,106],{},"Non",[67,108,109,113,116],{},[85,110,111],{},[22,112,32],{},[85,114,115],{},"Paires clé et valeur",[85,117,118],{},"Clés uniques",[120,121,126],"pre",{"className":122,"code":123,"language":124,"meta":125,"style":125},"language-kotlin shiki shiki-themes github-light-default github-dark-default github-dark-default","val ingredients = listOf(\"farine\", \"oeufs\", \"lait\", \"oeufs\")\nval etapes = setOf(1, 2, 2, 3)\nval temps = mapOf(\"tarte\" to 50, \"crêpes\" to 20)\n\nprintln(ingredients[0])    \u002F\u002F farine\nprintln(etapes)            \u002F\u002F [1, 2, 3]\nprintln(temps[\"tarte\"])    \u002F\u002F 50\n","kotlin","",[22,127,128,172,207,243,250,269,280],{"__ignoreMap":125},[129,130,133,137,141,144,148,151,155,157,160,162,165,167,169],"span",{"class":131,"line":132},"line",1,[129,134,136],{"class":135},"sOnC1","val",[129,138,140],{"class":139},"scfrF"," ingredients ",[129,142,143],{"class":135},"=",[129,145,147],{"class":146},"syCW7"," listOf",[129,149,150],{"class":139},"(",[129,152,154],{"class":153},"shWOn","\"farine\"",[129,156,25],{"class":139},[129,158,159],{"class":153},"\"oeufs\"",[129,161,25],{"class":139},[129,163,164],{"class":153},"\"lait\"",[129,166,25],{"class":139},[129,168,159],{"class":153},[129,170,171],{"class":139},")\n",[129,173,175,177,180,182,185,187,191,193,196,198,200,202,205],{"class":131,"line":174},2,[129,176,136],{"class":135},[129,178,179],{"class":139}," etapes ",[129,181,143],{"class":135},[129,183,184],{"class":146}," setOf",[129,186,150],{"class":139},[129,188,190],{"class":189},"s5iOY","1",[129,192,25],{"class":139},[129,194,195],{"class":189},"2",[129,197,25],{"class":139},[129,199,195],{"class":189},[129,201,25],{"class":139},[129,203,204],{"class":189},"3",[129,206,171],{"class":139},[129,208,210,212,215,217,220,222,225,228,231,233,236,238,241],{"class":131,"line":209},3,[129,211,136],{"class":135},[129,213,214],{"class":139}," temps ",[129,216,143],{"class":135},[129,218,219],{"class":146}," mapOf",[129,221,150],{"class":139},[129,223,224],{"class":153},"\"tarte\"",[129,226,227],{"class":139}," to ",[129,229,230],{"class":189},"50",[129,232,25],{"class":139},[129,234,235],{"class":153},"\"crêpes\"",[129,237,227],{"class":139},[129,239,240],{"class":189},"20",[129,242,171],{"class":139},[129,244,246],{"class":131,"line":245},4,[129,247,249],{"emptyLinePlaceholder":248},true,"\n",[129,251,253,256,259,262,265],{"class":131,"line":252},5,[129,254,255],{"class":146},"println",[129,257,258],{"class":139},"(ingredients[",[129,260,261],{"class":189},"0",[129,263,264],{"class":139},"])    ",[129,266,268],{"class":267},"sd6ml","\u002F\u002F farine\n",[129,270,272,274,277],{"class":131,"line":271},6,[129,273,255],{"class":146},[129,275,276],{"class":139},"(etapes)            ",[129,278,279],{"class":267},"\u002F\u002F [1, 2, 3]\n",[129,281,283,285,288,290,292],{"class":131,"line":282},7,[129,284,255],{"class":146},[129,286,287],{"class":139},"(temps[",[129,289,224],{"class":153},[129,291,264],{"class":139},[129,293,294],{"class":267},"\u002F\u002F 50\n",[52,296,297,300,301,304,305,308,309,312,313,316],{},[22,298,299],{},"mapOf"," prend des paires créées avec ",[22,302,303],{},"to",". ",[22,306,307],{},"\"tarte\" to 50"," équivaut à ",[22,310,311],{},"Pair(\"tarte\", 50)",". Lire une clé avec ",[22,314,315],{},"[]"," renvoie une valeur nullable, puisque la clé peut manquer.",[10,318,320],{"id":319},"lecture-seule-ou-modifiable","Lecture seule ou modifiable",[120,322,324],{"className":122,"code":323,"language":124,"meta":125,"style":125},"val lecture: List\u003CString> = listOf(\"sel\", \"poivre\")\nval modifiable: MutableList\u003CString> = mutableListOf(\"sel\")\n\nmodifiable.add(\"poivre\")\n\u002F\u002F lecture.add(\"huile\")   \u002F\u002F erreur : List n'a pas de add()\n",[22,325,326,361,388,392,406],{"__ignoreMap":125},[129,327,328,330,333,336,339,342,345,347,349,351,354,356,359],{"class":131,"line":132},[129,329,136],{"class":135},[129,331,332],{"class":139}," lecture: ",[129,334,24],{"class":335},"sIXEE",[129,337,338],{"class":139},"\u003C",[129,340,341],{"class":335},"String",[129,343,344],{"class":139},"> ",[129,346,143],{"class":135},[129,348,147],{"class":146},[129,350,150],{"class":139},[129,352,353],{"class":153},"\"sel\"",[129,355,25],{"class":139},[129,357,358],{"class":153},"\"poivre\"",[129,360,171],{"class":139},[129,362,363,365,368,371,373,375,377,379,382,384,386],{"class":131,"line":174},[129,364,136],{"class":135},[129,366,367],{"class":139}," modifiable: ",[129,369,370],{"class":335},"MutableList",[129,372,338],{"class":139},[129,374,341],{"class":335},[129,376,344],{"class":139},[129,378,143],{"class":135},[129,380,381],{"class":146}," mutableListOf",[129,383,150],{"class":139},[129,385,353],{"class":153},[129,387,171],{"class":139},[129,389,390],{"class":131,"line":209},[129,391,249],{"emptyLinePlaceholder":248},[129,393,394,397,400,402,404],{"class":131,"line":245},[129,395,396],{"class":139},"modifiable.",[129,398,399],{"class":146},"add",[129,401,150],{"class":139},[129,403,358],{"class":153},[129,405,171],{"class":139},[129,407,408,411],{"class":131,"line":252},[129,409,410],{"class":267},"\u002F\u002F lecture.add(\"huile\")",[129,412,413],{"class":267},"   \u002F\u002F erreur : List n'a pas de add()\n",[52,415,416,25,418,29,420,422,423,25,425,29,428,431],{},[22,417,24],{},[22,419,28],{},[22,421,32],{}," sont en lecture seule : on ne peut ni ajouter ni retirer. Leurs versions ",[22,424,370],{},[22,426,427],{},"MutableSet",[22,429,430],{},"MutableMap"," permettent de modifier le contenu.",[52,433,434],{},"La documentation recommande les types en lecture seule quand l'appelant n'a pas besoin de modifier la collection. Tu limites ainsi les surprises.",[10,436,438],{"id":437},"parcourir-une-collection","Parcourir une collection",[120,440,442],{"className":122,"code":441,"language":124,"meta":125,"style":125},"for (nom in ingredients) {\n    println(nom)\n}\n",[22,443,444,458,466],{"__ignoreMap":125},[129,445,446,449,452,455],{"class":131,"line":132},[129,447,448],{"class":135},"for",[129,450,451],{"class":139}," (nom ",[129,453,454],{"class":135},"in",[129,456,457],{"class":139}," ingredients) {\n",[129,459,460,463],{"class":131,"line":174},[129,461,462],{"class":146},"    println",[129,464,465],{"class":139},"(nom)\n",[129,467,468],{"class":131,"line":209},[129,469,470],{"class":139},"}\n",[52,472,473,474,476],{},"Tu connais déjà ",[22,475,448],{},". Kotlin offre aussi des fonctions qui font le travail à ta place, et elles reposent sur les lambdas.",[10,478,480],{"id":479},"les-lambdas","Les lambdas",[120,482,484],{"className":122,"code":483,"language":124,"meta":125,"style":125},"val majuscules = { texte: String -> texte.uppercase() }\nprintln(majuscules(\"tarte\"))   \u002F\u002F TARTE\n",[22,485,486,514],{"__ignoreMap":125},[129,487,488,490,493,495,498,500,503,506,508,511],{"class":131,"line":132},[129,489,136],{"class":135},[129,491,492],{"class":139}," majuscules ",[129,494,143],{"class":135},[129,496,497],{"class":139}," { texte: ",[129,499,341],{"class":335},[129,501,502],{"class":139}," -> ",[129,504,505],{"class":335},"texte",[129,507,46],{"class":139},[129,509,510],{"class":146},"uppercase",[129,512,513],{"class":139},"() }\n",[129,515,516,518,520,523,525,527,530],{"class":131,"line":174},[129,517,255],{"class":146},[129,519,150],{"class":139},[129,521,522],{"class":146},"majuscules",[129,524,150],{"class":139},[129,526,224],{"class":153},[129,528,529],{"class":139},"))   ",[129,531,532],{"class":267},"\u002F\u002F TARTE\n",[52,534,54,535,538,539,542],{},[56,536,537],{},"lambda"," est un petit morceau de code qu'on peut ranger dans une variable ou passer à une fonction. Elle s'écrit entre accolades : les paramètres, puis ",[22,540,541],{},"->",", puis le corps.",[52,544,545,546,548,549,552],{},"Une lambda sans paramètre s'écrit sans ",[22,547,541],{}," : ",[22,550,551],{},"{ println(\"Bonjour\") }",". Sans type de paramètre explicite, Kotlin a besoin qu'il soit déduisible du contexte.",[554,555,557],"h3",{"id":556},"passer-une-lambda-à-une-fonction","Passer une lambda à une fonction",[120,559,561],{"className":122,"code":560,"language":124,"meta":125,"style":125},"val nombres = listOf(1, 2, 3, 4)\nval somme = nombres.fold(0) { total, n -> total + n }\nprintln(somme)   \u002F\u002F 10\n",[22,562,563,593,626],{"__ignoreMap":125},[129,564,565,567,570,572,574,576,578,580,582,584,586,588,591],{"class":131,"line":132},[129,566,136],{"class":135},[129,568,569],{"class":139}," nombres ",[129,571,143],{"class":135},[129,573,147],{"class":146},[129,575,150],{"class":139},[129,577,190],{"class":189},[129,579,25],{"class":139},[129,581,195],{"class":189},[129,583,25],{"class":139},[129,585,204],{"class":189},[129,587,25],{"class":139},[129,589,590],{"class":189},"4",[129,592,171],{"class":139},[129,594,595,597,600,602,605,608,610,612,615,617,620,623],{"class":131,"line":174},[129,596,136],{"class":135},[129,598,599],{"class":139}," somme ",[129,601,143],{"class":135},[129,603,604],{"class":139}," nombres.",[129,606,607],{"class":146},"fold",[129,609,150],{"class":139},[129,611,261],{"class":189},[129,613,614],{"class":139},") { total, n ",[129,616,541],{"class":135},[129,618,619],{"class":139}," total ",[129,621,622],{"class":135},"+",[129,624,625],{"class":139}," n }\n",[129,627,628,630,633],{"class":131,"line":209},[129,629,255],{"class":146},[129,631,632],{"class":139},"(somme)   ",[129,634,635],{"class":267},"\u002F\u002F 10\n",[52,637,638,639,642,643,646],{},"Quand la lambda est le dernier paramètre, on l'écrit ",[56,640,641],{},"après"," les parenthèses. C'est une ",[56,644,645],{},"lambda de fin",". Si c'est le seul paramètre, les parenthèses disparaissent aussi.",[10,648,650],{"id":649},"filter-et-map","filter et map",[120,652,654],{"className":122,"code":653,"language":124,"meta":125,"style":125},"val minutes = listOf(10, 45, 20, 60)\n\nval courtes = minutes.filter { it \u003C 30 }\nval enHeures = minutes.map { it \u002F 60.0 }\n\nprintln(courtes)   \u002F\u002F [10, 20]\n",[22,655,656,688,692,717,740,744],{"__ignoreMap":125},[129,657,658,660,663,665,667,669,672,674,677,679,681,683,686],{"class":131,"line":132},[129,659,136],{"class":135},[129,661,662],{"class":139}," minutes ",[129,664,143],{"class":135},[129,666,147],{"class":146},[129,668,150],{"class":139},[129,670,671],{"class":189},"10",[129,673,25],{"class":139},[129,675,676],{"class":189},"45",[129,678,25],{"class":139},[129,680,240],{"class":189},[129,682,25],{"class":139},[129,684,685],{"class":189},"60",[129,687,171],{"class":139},[129,689,690],{"class":131,"line":174},[129,691,249],{"emptyLinePlaceholder":248},[129,693,694,696,699,701,704,706,709,711,714],{"class":131,"line":209},[129,695,136],{"class":135},[129,697,698],{"class":139}," courtes ",[129,700,143],{"class":135},[129,702,703],{"class":139}," minutes.",[129,705,42],{"class":146},[129,707,708],{"class":139}," { it ",[129,710,338],{"class":135},[129,712,713],{"class":189}," 30",[129,715,716],{"class":139}," }\n",[129,718,719,721,724,726,728,730,732,735,738],{"class":131,"line":245},[129,720,136],{"class":135},[129,722,723],{"class":139}," enHeures ",[129,725,143],{"class":135},[129,727,703],{"class":139},[129,729,45],{"class":146},[129,731,708],{"class":139},[129,733,734],{"class":135},"\u002F",[129,736,737],{"class":189}," 60.0",[129,739,716],{"class":139},[129,741,742],{"class":131,"line":252},[129,743,249],{"emptyLinePlaceholder":248},[129,745,746,748,751],{"class":131,"line":271},[129,747,255],{"class":146},[129,749,750],{"class":139},"(courtes)   ",[129,752,753],{"class":267},"\u002F\u002F [10, 20]\n",[52,755,756,758,759,304,762,764],{},[22,757,42],{}," garde les éléments pour lesquels la lambda renvoie ",[22,760,761],{},"true",[22,763,45],{}," transforme chaque élément et renvoie une nouvelle liste.",[52,766,767,768,771,772,775],{},"Quand la lambda a un seul paramètre, tu peux l'omettre et utiliser ",[22,769,770],{},"it",". Tu peux aussi le nommer, comme dans ",[22,773,774],{},"{ m -> m \u003C 30 }",", ce qui aide si le code devient long.",[52,777,778],{},"Ces fonctions ne modifient pas la liste d'origine. Elles renvoient toujours une nouvelle liste.",[554,780,782],{"id":781},"enchaîner-les-opérations","Enchaîner les opérations",[52,784,785],{},"Prenons une classe de recettes :",[120,787,789],{"className":122,"code":788,"language":124,"meta":125,"style":125},"data class Recette(val titre: String, val minutes: Int)\n\nval recettes = listOf(\n    Recette(\"Crêpes\", 20),\n    Recette(\"Tarte\", 50),\n    Recette(\"Salade\", 10)\n)\n\nval rapides = recettes\n    .filter { it.minutes \u003C= 30 }\n    .map { it.titre }\n\nprintln(rapides)   \u002F\u002F [Crêpes, Salade]\n",[22,790,791,823,827,841,858,873,888,892,897,910,928,938,943],{"__ignoreMap":125},[129,792,793,796,799,802,804,806,809,811,813,815,818,821],{"class":131,"line":132},[129,794,795],{"class":135},"data",[129,797,798],{"class":135}," class",[129,800,801],{"class":335}," Recette",[129,803,150],{"class":139},[129,805,136],{"class":135},[129,807,808],{"class":139}," titre: ",[129,810,341],{"class":335},[129,812,25],{"class":139},[129,814,136],{"class":135},[129,816,817],{"class":139}," minutes: ",[129,819,820],{"class":335},"Int",[129,822,171],{"class":139},[129,824,825],{"class":131,"line":174},[129,826,249],{"emptyLinePlaceholder":248},[129,828,829,831,834,836,838],{"class":131,"line":209},[129,830,136],{"class":135},[129,832,833],{"class":139}," recettes ",[129,835,143],{"class":135},[129,837,147],{"class":146},[129,839,840],{"class":139},"(\n",[129,842,843,846,848,851,853,855],{"class":131,"line":245},[129,844,845],{"class":146},"    Recette",[129,847,150],{"class":139},[129,849,850],{"class":153},"\"Crêpes\"",[129,852,25],{"class":139},[129,854,240],{"class":189},[129,856,857],{"class":139},"),\n",[129,859,860,862,864,867,869,871],{"class":131,"line":252},[129,861,845],{"class":146},[129,863,150],{"class":139},[129,865,866],{"class":153},"\"Tarte\"",[129,868,25],{"class":139},[129,870,230],{"class":189},[129,872,857],{"class":139},[129,874,875,877,879,882,884,886],{"class":131,"line":271},[129,876,845],{"class":146},[129,878,150],{"class":139},[129,880,881],{"class":153},"\"Salade\"",[129,883,25],{"class":139},[129,885,671],{"class":189},[129,887,171],{"class":139},[129,889,890],{"class":131,"line":282},[129,891,171],{"class":139},[129,893,895],{"class":131,"line":894},8,[129,896,249],{"emptyLinePlaceholder":248},[129,898,900,902,905,907],{"class":131,"line":899},9,[129,901,136],{"class":135},[129,903,904],{"class":139}," rapides ",[129,906,143],{"class":135},[129,908,909],{"class":139}," recettes\n",[129,911,913,916,918,921,924,926],{"class":131,"line":912},10,[129,914,915],{"class":139},"    .",[129,917,42],{"class":146},[129,919,920],{"class":139}," { it.minutes ",[129,922,923],{"class":135},"\u003C=",[129,925,713],{"class":189},[129,927,716],{"class":139},[129,929,931,933,935],{"class":131,"line":930},11,[129,932,915],{"class":139},[129,934,45],{"class":146},[129,936,937],{"class":139}," { it.titre }\n",[129,939,941],{"class":131,"line":940},12,[129,942,249],{"emptyLinePlaceholder":248},[129,944,946,948,951],{"class":131,"line":945},13,[129,947,255],{"class":146},[129,949,950],{"class":139},"(rapides)   ",[129,952,953],{"class":267},"\u002F\u002F [Crêpes, Salade]\n",[52,955,956],{},"Chaque appel part du résultat du précédent. On lit la chaîne comme une phrase : « garde les recettes de 30 minutes ou moins, puis prends leur titre ».",[958,959,960],"tip",{},[52,961,962],{},"Écris un point par ligne dans une chaîne d'opérations. Tu peux lire chaque étape séparément et en commenter une sans toucher aux autres.",[10,964,966],{"id":965},"une-lambda-en-retour","Une lambda en retour",[120,968,970],{"className":122,"code":969,"language":124,"meta":125,"style":125},"fun convertisseur(unite: String): (Int) -> Int = when (unite) {\n    \"heure\" -> { v -> v * 60 }\n    else -> { v -> v }\n}\n\nprintln(convertisseur(\"heure\")(2))   \u002F\u002F 120\n",[22,971,972,1004,1028,1042,1046,1050],{"__ignoreMap":125},[129,973,974,977,980,983,985,988,990,993,995,998,1001],{"class":131,"line":132},[129,975,976],{"class":135},"fun",[129,978,979],{"class":146}," convertisseur",[129,981,982],{"class":139},"(unite: ",[129,984,341],{"class":335},[129,986,987],{"class":139},"): (",[129,989,820],{"class":335},[129,991,992],{"class":139},") -> ",[129,994,820],{"class":335},[129,996,997],{"class":135}," =",[129,999,1000],{"class":135}," when",[129,1002,1003],{"class":139}," (unite) {\n",[129,1005,1006,1009,1012,1015,1017,1020,1023,1026],{"class":131,"line":174},[129,1007,1008],{"class":153},"    \"heure\"",[129,1010,1011],{"class":135}," ->",[129,1013,1014],{"class":139}," { v ",[129,1016,541],{"class":135},[129,1018,1019],{"class":139}," v ",[129,1021,1022],{"class":135},"*",[129,1024,1025],{"class":189}," 60",[129,1027,716],{"class":139},[129,1029,1030,1033,1035,1037,1039],{"class":131,"line":209},[129,1031,1032],{"class":135},"    else",[129,1034,1011],{"class":135},[129,1036,1014],{"class":139},[129,1038,541],{"class":135},[129,1040,1041],{"class":139}," v }\n",[129,1043,1044],{"class":131,"line":245},[129,1045,470],{"class":139},[129,1047,1048],{"class":131,"line":252},[129,1049,249],{"emptyLinePlaceholder":248},[129,1051,1052,1054,1056,1059,1061,1064,1067,1069,1071],{"class":131,"line":271},[129,1053,255],{"class":146},[129,1055,150],{"class":139},[129,1057,1058],{"class":146},"convertisseur",[129,1060,150],{"class":139},[129,1062,1063],{"class":153},"\"heure\"",[129,1065,1066],{"class":139},")(",[129,1068,195],{"class":189},[129,1070,529],{"class":139},[129,1072,1073],{"class":267},"\u002F\u002F 120\n",[52,1075,1076,1077,548,1080,1083,1084,1086,1087,1089],{},"Une fonction peut renvoyer une lambda. Son type de retour s'écrit alors comme un ",[56,1078,1079],{},"type de fonction",[22,1081,1082],{},"(Int) -> Int"," signifie « prend un ",[22,1085,820],{},", renvoie un ",[22,1088,820],{}," ».",[10,1091,1093],{"id":1092},"à-retenir","À retenir",[15,1095,1096,1107,1122,1129,1132,1140],{},[18,1097,1098,1100,1101,1103,1104,1106],{},[22,1099,24],{}," est ordonnée, ",[22,1102,28],{}," garde des éléments uniques, ",[22,1105,32],{}," associe des clés à des valeurs.",[18,1108,1109,25,1112,29,1115,1117,1118,1121],{},[22,1110,1111],{},"listOf",[22,1113,1114],{},"setOf",[22,1116,299],{}," créent des collections en lecture seule ; ",[22,1119,1120],{},"mutableListOf"," et ses équivalents permettent la modification.",[18,1123,1124,1125,1128],{},"Une lambda s'écrit ",[22,1126,1127],{},"{ parametre -> corps }"," et peut être passée à une fonction.",[18,1130,1131],{},"Une lambda placée en dernier paramètre s'écrit après les parenthèses.",[18,1133,1134,1136,1137,1139],{},[22,1135,42],{}," garde des éléments, ",[22,1138,45],{}," les transforme : toutes deux renvoient une nouvelle liste.",[18,1141,1142,1144],{},[22,1143,770],{}," désigne l'unique paramètre d'une lambda quand on ne le nomme pas.",[1146,1147,1148],"style",{},"html pre.shiki code .sOnC1, html code.shiki .sOnC1{--shiki-light:#CF222E;--shiki-default:#FF7B72;--shiki-dark:#FF7B72}html pre.shiki code .scfrF, html code.shiki .scfrF{--shiki-light:#1F2328;--shiki-default:#E6EDF3;--shiki-dark:#E6EDF3}html pre.shiki code .syCW7, html code.shiki .syCW7{--shiki-light:#8250DF;--shiki-default:#D2A8FF;--shiki-dark:#D2A8FF}html pre.shiki code .shWOn, html code.shiki .shWOn{--shiki-light:#0A3069;--shiki-default:#A5D6FF;--shiki-dark:#A5D6FF}html pre.shiki code .s5iOY, html code.shiki .s5iOY{--shiki-light:#0550AE;--shiki-default:#79C0FF;--shiki-dark:#79C0FF}html pre.shiki code .sd6ml, html code.shiki .sd6ml{--shiki-light:#6E7781;--shiki-default:#8B949E;--shiki-dark:#8B949E}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sIXEE, html code.shiki .sIXEE{--shiki-light:#953800;--shiki-default:#FFA657;--shiki-dark:#FFA657}",{"title":125,"searchDepth":174,"depth":209,"links":1150},[1151,1152,1153,1154,1155,1158,1161,1162],{"id":12,"depth":174,"text":13},{"id":49,"depth":174,"text":50},{"id":319,"depth":174,"text":320},{"id":437,"depth":174,"text":438},{"id":479,"depth":174,"text":480,"children":1156},[1157],{"id":556,"depth":209,"text":557},{"id":649,"depth":174,"text":650,"children":1159},[1160],{"id":781,"depth":209,"text":782},{"id":965,"depth":174,"text":966},{"id":1092,"depth":174,"text":1093},"Manipuler des listes, ensembles et dictionnaires, puis les transformer avec des lambdas comme map et filter, sur le thème des recettes.","md",{},[24,28,32,1111,1120,537,45,42],"intermediaire","\u002Fkotlin\u002Fcollections-et-lambdas",[1170],"\u002Fkotlin\u002Fclasses-et-objets",[1172,1176,1180],{"nom":1173,"url":1174,"type":1175},"Collections et fonctions d'ordre supérieur, cours Principes de base d'Android avec Compose","https:\u002F\u002Fdeveloper.android.com\u002Fcourses\u002Fandroid-basics-compose\u002Fcourse?hl=fr","cours",{"nom":1177,"url":1178,"type":1179,"anglais":248},"Collections overview (en anglais)","https:\u002F\u002Fkotlinlang.org\u002Fdocs\u002Fcollections-overview.html","doc",{"nom":1181,"url":1182,"type":1179,"anglais":248},"Fonctions et lambdas, visite guidée de Kotlin (en anglais)","https:\u002F\u002Fkotlinlang.org\u002Fdocs\u002Fkotlin-tour-functions.html",{"title":5,"description":1163},[1185,1186],{"nom":1177,"url":1178},{"nom":1181,"url":1182},"kotlin\u002F05.collections-et-lambdas","t2eOmOR6iJgOhcT2-OJvNw17TqK6k-n4u26D7EVu7Gg",[1190,1194,1198,1202,1205,1206,1210],{"path":1191,"title":1192,"stem":1193},"\u002Fkotlin\u002Fdecouvrir-kotlin","Découvrir Kotlin","kotlin\u002F01.decouvrir-kotlin",{"path":1195,"title":1196,"stem":1197},"\u002Fkotlin\u002Fconditions-boucles-fonctions","Conditions, boucles et fonctions","kotlin\u002F02.conditions-boucles-fonctions",{"path":1199,"title":1200,"stem":1201},"\u002Fkotlin\u002Fsecurite-du-null","La sécurité du null","kotlin\u002F03.securite-du-null",{"path":1170,"title":1203,"stem":1204},"Classes, data classes et objets","kotlin\u002F04.classes-et-objets",{"path":1168,"title":5,"stem":1187},{"path":1207,"title":1208,"stem":1209},"\u002Fkotlin\u002Fcoroutines-et-compose","Coroutines et Jetpack Compose","kotlin\u002F06.coroutines-et-compose",{"path":1211,"title":1212,"stem":1213},"\u002Fkotlin","Kotlin","kotlin\u002Findex",[1215,1217],{"title":1203,"path":1170,"stem":1204,"description":1216,"children":-1},"Modéliser tes données avec class et data class, puis utiliser object et companion object pour un singleton ou des fonctions de fabrique.",{"title":1208,"path":1207,"stem":1209,"description":1218,"children":-1},"Lancer des tâches en parallèle avec les coroutines (suspend, launch, async), puis découvrir Jetpack Compose avec des fonctions @Composable.",[1220],{"path":1170,"title":1203,"ligne":124},[1222,1224,1225,1226,1227,1228,1230],{"path":1191,"title":1192,"niveau":1223,"stem":1193},"debutant",{"path":1195,"title":1196,"niveau":1223,"stem":1197},{"path":1199,"title":1200,"niveau":1223,"stem":1201},{"path":1170,"title":1203,"niveau":1167,"stem":1204},{"path":1168,"title":5,"niveau":1167,"stem":1187},{"path":1207,"title":1208,"niveau":1229,"stem":1209},"avance",{"path":1211,"title":1212,"niveau":1231,"stem":1213},"memo",1794583462168]