[{"data":1,"prerenderedAt":1109},["ShallowReactive",2],{"page-\u002Fkotlin\u002Fclasses-et-objets":3,"pieces-kotlin":1066,"autour-\u002Fkotlin\u002Fclasses-et-objets":1091,"prerequis-\u002Fkotlin\u002Fclasses-et-objets":1096,"plan-kotlin":1098},{"id":4,"title":5,"body":6,"description":1035,"extension":1036,"ligne":49,"meta":1037,"motsCles":1038,"navigation":151,"niveau":1041,"path":1042,"prerequis":1043,"ressources":1045,"seo":1057,"sources":1058,"stem":1064,"__hash__":1065},"docs\u002Fkotlin\u002F04.classes-et-objets.md","Classes, data classes et objets",{"type":7,"value":8,"toc":1024},"minimark",[9,14,40,44,222,235,252,267,278,282,371,374,378,488,496,528,535,541,546,633,638,649,656,660,805,815,819,901,910,966,970,1020],[10,11,13],"h2",{"id":12},"ce-que-tu-vas-apprendre","Ce que tu vas apprendre",[15,16,17,21,29],"ul",{},[18,19,20],"li",{},"Déclarer une classe avec ses propriétés et ses méthodes.",[18,22,23,24,28],{},"Utiliser une ",[25,26,27],"code",{},"data class"," pour représenter des données comme une recette.",[18,30,31,32,35,36,39],{},"Comprendre ",[25,33,34],{},"object"," et ",[25,37,38],{},"companion object",".",[10,41,43],{"id":42},"une-première-classe","Une première classe",[45,46,51],"pre",{"className":47,"code":48,"language":49,"meta":50,"style":50},"language-kotlin shiki shiki-themes github-light-default github-dark-default github-dark-default","class Ingredient(val nom: String, var quantite: Int) {\n    fun afficher() {\n        println(\"$quantite x $nom\")\n    }\n}\n\nfun main() {\n    val farine = Ingredient(\"farine\", 250)\n    farine.quantite = 300\n    farine.afficher()   \u002F\u002F 300 x farine\n}\n","kotlin","",[25,52,53,94,107,134,140,146,153,164,190,201,217],{"__ignoreMap":50},[54,55,58,62,66,70,73,76,79,82,85,88,91],"span",{"class":56,"line":57},"line",1,[54,59,61],{"class":60},"sOnC1","class",[54,63,65],{"class":64},"sIXEE"," Ingredient",[54,67,69],{"class":68},"scfrF","(",[54,71,72],{"class":60},"val",[54,74,75],{"class":68}," nom: ",[54,77,78],{"class":64},"String",[54,80,81],{"class":68},", ",[54,83,84],{"class":60},"var",[54,86,87],{"class":68}," quantite: ",[54,89,90],{"class":64},"Int",[54,92,93],{"class":68},") {\n",[54,95,97,100,104],{"class":56,"line":96},2,[54,98,99],{"class":60},"    fun",[54,101,103],{"class":102},"syCW7"," afficher",[54,105,106],{"class":68},"() {\n",[54,108,110,113,115,119,123,126,129,131],{"class":56,"line":109},3,[54,111,112],{"class":102},"        println",[54,114,69],{"class":68},[54,116,118],{"class":117},"shWOn","\"",[54,120,122],{"class":121},"s5iOY","$quantite",[54,124,125],{"class":117}," x ",[54,127,128],{"class":121},"$nom",[54,130,118],{"class":117},[54,132,133],{"class":68},")\n",[54,135,137],{"class":56,"line":136},4,[54,138,139],{"class":68},"    }\n",[54,141,143],{"class":56,"line":142},5,[54,144,145],{"class":68},"}\n",[54,147,149],{"class":56,"line":148},6,[54,150,152],{"emptyLinePlaceholder":151},true,"\n",[54,154,156,159,162],{"class":56,"line":155},7,[54,157,158],{"class":60},"fun",[54,160,161],{"class":102}," main",[54,163,106],{"class":68},[54,165,167,170,173,176,178,180,183,185,188],{"class":56,"line":166},8,[54,168,169],{"class":60},"    val",[54,171,172],{"class":68}," farine ",[54,174,175],{"class":60},"=",[54,177,65],{"class":102},[54,179,69],{"class":68},[54,181,182],{"class":117},"\"farine\"",[54,184,81],{"class":68},[54,186,187],{"class":121},"250",[54,189,133],{"class":68},[54,191,193,196,198],{"class":56,"line":192},9,[54,194,195],{"class":68},"    farine.quantite ",[54,197,175],{"class":60},[54,199,200],{"class":121}," 300\n",[54,202,204,207,210,213],{"class":56,"line":203},10,[54,205,206],{"class":68},"    farine.",[54,208,209],{"class":102},"afficher",[54,211,212],{"class":68},"()   ",[54,214,216],{"class":215},"sd6ml","\u002F\u002F 300 x farine\n",[54,218,220],{"class":56,"line":219},11,[54,221,145],{"class":68},[223,224,225,226,230,231,234],"p",{},"Une ",[227,228,229],"strong",{},"classe"," est un modèle qui décrit un type d'objet, ici un ingrédient. Une ",[227,232,233],{},"instance"," est un objet créé à partir de ce modèle.",[223,236,237,238,241,242,244,245,247,248,251],{},"La liste entre parenthèses après le nom est le ",[227,239,240],{},"constructeur principal",". Les paramètres marqués ",[25,243,72],{}," ou ",[25,246,84],{}," deviennent des ",[227,249,250],{},"propriétés",", c'est-à-dire des valeurs rangées dans l'objet.",[223,253,254,255,258,259,262,263,266],{},"On crée une instance sans mot-clé ",[25,256,257],{},"new"," : ",[25,260,261],{},"Ingredient(\"farine\", 250)",". On lit une propriété avec un point, et on appelle une ",[227,264,265],{},"méthode"," (une fonction de la classe) de la même façon.",[223,268,269,271,272,274,275,277],{},[25,270,72],{}," donne une propriété en lecture seule, ",[25,273,84],{}," une propriété modifiable. Choisis ",[25,276,72],{}," sauf si la valeur doit changer.",[10,279,281],{"id":280},"valeurs-par-défaut","Valeurs par défaut",[45,283,285],{"className":47,"code":284,"language":49,"meta":50,"style":50},"class Recette(val titre: String, var portions: Int = 4) {\n    val categorie: String = \"plat\"\n}\n\nval gratin = Recette(\"Gratin\")\nprintln(gratin.portions)   \u002F\u002F 4\n",[25,286,287,320,334,338,342,360],{"__ignoreMap":50},[54,288,289,291,294,296,298,301,303,305,307,310,312,315,318],{"class":56,"line":57},[54,290,61],{"class":60},[54,292,293],{"class":64}," Recette",[54,295,69],{"class":68},[54,297,72],{"class":60},[54,299,300],{"class":68}," titre: ",[54,302,78],{"class":64},[54,304,81],{"class":68},[54,306,84],{"class":60},[54,308,309],{"class":68}," portions: ",[54,311,90],{"class":64},[54,313,314],{"class":60}," =",[54,316,317],{"class":121}," 4",[54,319,93],{"class":68},[54,321,322,324,327,329,331],{"class":56,"line":96},[54,323,169],{"class":60},[54,325,326],{"class":68}," categorie: ",[54,328,78],{"class":64},[54,330,314],{"class":60},[54,332,333],{"class":117}," \"plat\"\n",[54,335,336],{"class":56,"line":109},[54,337,145],{"class":68},[54,339,340],{"class":56,"line":136},[54,341,152],{"emptyLinePlaceholder":151},[54,343,344,346,349,351,353,355,358],{"class":56,"line":142},[54,345,72],{"class":60},[54,347,348],{"class":68}," gratin ",[54,350,175],{"class":60},[54,352,293],{"class":102},[54,354,69],{"class":68},[54,356,357],{"class":117},"\"Gratin\"",[54,359,133],{"class":68},[54,361,362,365,368],{"class":56,"line":148},[54,363,364],{"class":102},"println",[54,366,367],{"class":68},"(gratin.portions)   ",[54,369,370],{"class":215},"\u002F\u002F 4\n",[223,372,373],{},"Un paramètre du constructeur peut avoir une valeur par défaut, comme pour une fonction. On peut aussi déclarer une propriété dans le corps de la classe, avec une valeur initiale.",[10,375,377],{"id":376},"data-class-des-données-prêtes-à-lemploi","data class : des données prêtes à l'emploi",[45,379,381],{"className":47,"code":380,"language":49,"meta":50,"style":50},"data class Recette(val titre: String, val minutes: Int)\n\nfun main() {\n    val tarte = Recette(\"Tarte\", 50)\n    println(tarte)                     \u002F\u002F Recette(titre=Tarte, minutes=50)\n    println(tarte == Recette(\"Tarte\", 50))   \u002F\u002F true\n}\n",[25,382,383,412,416,424,447,458,484],{"__ignoreMap":50},[54,384,385,388,391,393,395,397,399,401,403,405,408,410],{"class":56,"line":57},[54,386,387],{"class":60},"data",[54,389,390],{"class":60}," class",[54,392,293],{"class":64},[54,394,69],{"class":68},[54,396,72],{"class":60},[54,398,300],{"class":68},[54,400,78],{"class":64},[54,402,81],{"class":68},[54,404,72],{"class":60},[54,406,407],{"class":68}," minutes: ",[54,409,90],{"class":64},[54,411,133],{"class":68},[54,413,414],{"class":56,"line":96},[54,415,152],{"emptyLinePlaceholder":151},[54,417,418,420,422],{"class":56,"line":109},[54,419,158],{"class":60},[54,421,161],{"class":102},[54,423,106],{"class":68},[54,425,426,428,431,433,435,437,440,442,445],{"class":56,"line":136},[54,427,169],{"class":60},[54,429,430],{"class":68}," tarte ",[54,432,175],{"class":60},[54,434,293],{"class":102},[54,436,69],{"class":68},[54,438,439],{"class":117},"\"Tarte\"",[54,441,81],{"class":68},[54,443,444],{"class":121},"50",[54,446,133],{"class":68},[54,448,449,452,455],{"class":56,"line":142},[54,450,451],{"class":102},"    println",[54,453,454],{"class":68},"(tarte)                     ",[54,456,457],{"class":215},"\u002F\u002F Recette(titre=Tarte, minutes=50)\n",[54,459,460,462,465,468,470,472,474,476,478,481],{"class":56,"line":148},[54,461,451],{"class":102},[54,463,464],{"class":68},"(tarte ",[54,466,467],{"class":60},"==",[54,469,293],{"class":102},[54,471,69],{"class":68},[54,473,439],{"class":117},[54,475,81],{"class":68},[54,477,444],{"class":121},[54,479,480],{"class":68},"))   ",[54,482,483],{"class":215},"\u002F\u002F true\n",[54,485,486],{"class":56,"line":155},[54,487,145],{"class":68},[223,489,225,490,492,493,495],{},[227,491,27],{}," se déclare avec ",[25,494,387],{},". Le compilateur génère pour toi plusieurs fonctions à partir des propriétés du constructeur principal :",[15,497,498,504,516,522],{},[18,499,500,503],{},[25,501,502],{},"toString()"," pour un affichage lisible ;",[18,505,506,35,509,512,513,515],{},[25,507,508],{},"equals()",[25,510,511],{},"hashCode()"," pour comparer le contenu avec ",[25,514,467],{}," ;",[18,517,518,521],{},[25,519,520],{},"copy()"," pour dupliquer l'objet ;",[18,523,524,527],{},[25,525,526],{},"componentN()",", qui permet la déstructuration.",[223,529,530,531,244,533,39],{},"Le constructeur principal doit avoir au moins un paramètre, et chaque paramètre doit être marqué ",[25,532,72],{},[25,534,84],{},[536,537,538],"note",{},[223,539,540],{},"Une classe ordinaire compare par identité : deux objets au contenu identique ne sont pas égaux. Une data class compare le contenu, ce qui convient à des données comme une recette.",[542,543,545],"h3",{"id":544},"copy-et-déstructuration","copy et déstructuration",[45,547,549],{"className":47,"code":548,"language":49,"meta":50,"style":50},"val tarte = Recette(\"Tarte\", 50)\nval rapide = tarte.copy(minutes = 30)\nval (titre, minutes) = rapide\nprintln(\"$titre : $minutes min\")   \u002F\u002F Tarte : 30 min\n",[25,550,551,571,596,608],{"__ignoreMap":50},[54,552,553,555,557,559,561,563,565,567,569],{"class":56,"line":57},[54,554,72],{"class":60},[54,556,430],{"class":68},[54,558,175],{"class":60},[54,560,293],{"class":102},[54,562,69],{"class":68},[54,564,439],{"class":117},[54,566,81],{"class":68},[54,568,444],{"class":121},[54,570,133],{"class":68},[54,572,573,575,578,580,583,586,589,591,594],{"class":56,"line":96},[54,574,72],{"class":60},[54,576,577],{"class":68}," rapide ",[54,579,175],{"class":60},[54,581,582],{"class":68}," tarte.",[54,584,585],{"class":102},"copy",[54,587,588],{"class":68},"(minutes ",[54,590,175],{"class":60},[54,592,593],{"class":121}," 30",[54,595,133],{"class":68},[54,597,598,600,603,605],{"class":56,"line":109},[54,599,72],{"class":60},[54,601,602],{"class":68}," (titre, minutes) ",[54,604,175],{"class":60},[54,606,607],{"class":68}," rapide\n",[54,609,610,612,614,616,619,621,624,627,630],{"class":56,"line":136},[54,611,364],{"class":102},[54,613,69],{"class":68},[54,615,118],{"class":117},[54,617,618],{"class":121},"$titre",[54,620,258],{"class":117},[54,622,623],{"class":121},"$minutes",[54,625,626],{"class":117}," min\"",[54,628,629],{"class":68},")   ",[54,631,632],{"class":215},"\u002F\u002F Tarte : 30 min\n",[223,634,635,637],{},[25,636,520],{}," crée un nouvel objet en changeant seulement les propriétés indiquées. L'original reste intact.",[223,639,640,641,644,645,648],{},"La ",[227,642,643],{},"déstructuration"," ",[25,646,647],{},"val (titre, minutes) = rapide"," répartit les propriétés dans des variables, dans l'ordre de déclaration.",[223,650,651,652,655],{},"La copie est ",[227,653,654],{},"superficielle"," : si une propriété contient une liste modifiable, la copie et l'original partagent cette liste. Préfère des données non modifiables.",[10,657,659],{"id":658},"object-un-singleton","object : un singleton",[45,661,663],{"className":47,"code":662,"language":49,"meta":50,"style":50},"object CarnetDeRecettes {\n    private val recettes = mutableListOf\u003CString>()\n\n    fun ajouter(titre: String) {\n        recettes.add(titre)\n    }\n\n    fun nombre() = recettes.size\n}\n\nfun main() {\n    CarnetDeRecettes.ajouter(\"Quiche\")\n    println(CarnetDeRecettes.nombre())   \u002F\u002F 1\n}\n",[25,664,665,675,699,703,717,728,732,736,751,755,759,767,783,800],{"__ignoreMap":50},[54,666,667,669,672],{"class":56,"line":57},[54,668,34],{"class":60},[54,670,671],{"class":64}," CarnetDeRecettes",[54,673,674],{"class":68}," {\n",[54,676,677,680,683,686,688,691,694,696],{"class":56,"line":96},[54,678,679],{"class":60},"    private",[54,681,682],{"class":60}," val",[54,684,685],{"class":68}," recettes ",[54,687,175],{"class":60},[54,689,690],{"class":102}," mutableListOf",[54,692,693],{"class":68},"\u003C",[54,695,78],{"class":64},[54,697,698],{"class":68},">()\n",[54,700,701],{"class":56,"line":109},[54,702,152],{"emptyLinePlaceholder":151},[54,704,705,707,710,713,715],{"class":56,"line":136},[54,706,99],{"class":60},[54,708,709],{"class":102}," ajouter",[54,711,712],{"class":68},"(titre: ",[54,714,78],{"class":64},[54,716,93],{"class":68},[54,718,719,722,725],{"class":56,"line":142},[54,720,721],{"class":68},"        recettes.",[54,723,724],{"class":102},"add",[54,726,727],{"class":68},"(titre)\n",[54,729,730],{"class":56,"line":148},[54,731,139],{"class":68},[54,733,734],{"class":56,"line":155},[54,735,152],{"emptyLinePlaceholder":151},[54,737,738,740,743,746,748],{"class":56,"line":166},[54,739,99],{"class":60},[54,741,742],{"class":102}," nombre",[54,744,745],{"class":68},"() ",[54,747,175],{"class":60},[54,749,750],{"class":68}," recettes.size\n",[54,752,753],{"class":56,"line":192},[54,754,145],{"class":68},[54,756,757],{"class":56,"line":203},[54,758,152],{"emptyLinePlaceholder":151},[54,760,761,763,765],{"class":56,"line":219},[54,762,158],{"class":60},[54,764,161],{"class":102},[54,766,106],{"class":68},[54,768,770,773,776,778,781],{"class":56,"line":769},12,[54,771,772],{"class":68},"    CarnetDeRecettes.",[54,774,775],{"class":102},"ajouter",[54,777,69],{"class":68},[54,779,780],{"class":117},"\"Quiche\"",[54,782,133],{"class":68},[54,784,786,788,791,794,797],{"class":56,"line":785},13,[54,787,451],{"class":102},[54,789,790],{"class":68},"(CarnetDeRecettes.",[54,792,793],{"class":102},"nombre",[54,795,796],{"class":68},"())   ",[54,798,799],{"class":215},"\u002F\u002F 1\n",[54,801,803],{"class":56,"line":802},14,[54,804,145],{"class":68},[223,806,807,808,810,811,814],{},"Un ",[227,809,34],{}," déclare une classe et crée son unique instance en une seule étape. On l'appelle un ",[227,812,813],{},"singleton",". On l'utilise directement par son nom, sans le construire.",[10,816,818],{"id":817},"companion-object-des-fonctions-de-classe","companion object : des fonctions de classe",[45,820,822],{"className":47,"code":821,"language":49,"meta":50,"style":50},"class Recette(val titre: String) {\n    companion object {\n        fun vide() = Recette(\"Sans titre\")\n    }\n}\n\nval brouillon = Recette.vide()\n",[25,823,824,840,850,871,875,879,883],{"__ignoreMap":50},[54,825,826,828,830,832,834,836,838],{"class":56,"line":57},[54,827,61],{"class":60},[54,829,293],{"class":64},[54,831,69],{"class":68},[54,833,72],{"class":60},[54,835,300],{"class":68},[54,837,78],{"class":64},[54,839,93],{"class":68},[54,841,842,845,848],{"class":56,"line":96},[54,843,844],{"class":60},"    companion",[54,846,847],{"class":60}," object",[54,849,674],{"class":68},[54,851,852,855,858,860,862,864,866,869],{"class":56,"line":109},[54,853,854],{"class":60},"        fun",[54,856,857],{"class":102}," vide",[54,859,745],{"class":68},[54,861,175],{"class":60},[54,863,293],{"class":102},[54,865,69],{"class":68},[54,867,868],{"class":117},"\"Sans titre\"",[54,870,133],{"class":68},[54,872,873],{"class":56,"line":136},[54,874,139],{"class":68},[54,876,877],{"class":56,"line":142},[54,878,145],{"class":68},[54,880,881],{"class":56,"line":148},[54,882,152],{"emptyLinePlaceholder":151},[54,884,885,887,890,892,895,898],{"class":56,"line":155},[54,886,72],{"class":60},[54,888,889],{"class":68}," brouillon ",[54,891,175],{"class":60},[54,893,894],{"class":68}," Recette.",[54,896,897],{"class":102},"vide",[54,899,900],{"class":68},"()\n",[223,902,807,903,905,906,909],{},[227,904,38],{}," est un objet rangé à l'intérieur d'une classe. Ses fonctions s'appellent avec le nom de la classe, ",[25,907,908],{},"Recette.vide()",". On y met souvent des fonctions de fabrique ou des constantes.",[911,912,913,926],"table",{},[914,915,916],"thead",{},[917,918,919,923],"tr",{},[920,921,922],"th",{},"Besoin",[920,924,925],{},"Outil",[927,928,929,939,948,957],"tbody",{},[917,930,931,935],{},[932,933,934],"td",{},"Plusieurs instances avec des données",[932,936,937],{},[25,938,61],{},[917,940,941,944],{},[932,942,943],{},"Des données comparables et copiables",[932,945,946],{},[25,947,27],{},[917,949,950,953],{},[932,951,952],{},"Une seule instance partagée",[932,954,955],{},[25,956,34],{},[917,958,959,962],{},[932,960,961],{},"Des fonctions rattachées à une classe",[932,963,964],{},[25,965,38],{},[10,967,969],{"id":968},"à-retenir","À retenir",[15,971,972,982,988,1005,1010,1015],{},[18,973,225,974,976,977,244,979,981],{},[25,975,61],{}," décrit un modèle ; ses paramètres ",[25,978,72],{},[25,980,84],{}," du constructeur deviennent des propriétés.",[18,983,984,985,987],{},"On crée une instance sans ",[25,986,257],{}," et on accède aux membres avec un point.",[18,989,225,990,992,993,81,996,81,999,81,1002,1004],{},[25,991,27],{}," génère ",[25,994,995],{},"toString",[25,997,998],{},"equals",[25,1000,1001],{},"hashCode",[25,1003,585],{}," et la déstructuration.",[18,1006,1007,1009],{},[25,1008,520],{}," est superficiel : attention aux listes modifiables partagées.",[18,1011,1012,1014],{},[25,1013,34],{}," crée un singleton utilisable directement par son nom.",[18,1016,1017,1019],{},[25,1018,38],{}," regroupe les fonctions et constantes rattachées à une classe.",[1021,1022,1023],"style",{},"html pre.shiki code .sOnC1, html code.shiki .sOnC1{--shiki-light:#CF222E;--shiki-default:#FF7B72;--shiki-dark:#FF7B72}html pre.shiki code .sIXEE, html code.shiki .sIXEE{--shiki-light:#953800;--shiki-default:#FFA657;--shiki-dark:#FFA657}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);}",{"title":50,"searchDepth":96,"depth":109,"links":1025},[1026,1027,1028,1029,1032,1033,1034],{"id":12,"depth":96,"text":13},{"id":42,"depth":96,"text":43},{"id":280,"depth":96,"text":281},{"id":376,"depth":96,"text":377,"children":1030},[1031],{"id":544,"depth":109,"text":545},{"id":658,"depth":96,"text":659},{"id":817,"depth":96,"text":818},{"id":968,"depth":96,"text":969},"Modéliser tes données avec class et data class, puis utiliser object et companion object pour un singleton ou des fonctions de fabrique.","md",{},[61,1039,1040,265,27,585,34,38],"constructeur","propriété","intermediaire","\u002Fkotlin\u002Fclasses-et-objets",[1044],"\u002Fkotlin\u002Fsecurite-du-null",[1046,1050,1054],{"nom":1047,"url":1048,"type":1049},"Classes et objets, cours Principes de base d'Android avec Compose","https:\u002F\u002Fdeveloper.android.com\u002Fcourses\u002Fandroid-basics-compose\u002Fcourse?hl=fr","cours",{"nom":1051,"url":1052,"type":1053,"anglais":151},"Classes, visite guidée de Kotlin (en anglais)","https:\u002F\u002Fkotlinlang.org\u002Fdocs\u002Fkotlin-tour-classes.html","doc",{"nom":1055,"url":1056,"type":1053,"anglais":151},"Data classes (en anglais)","https:\u002F\u002Fkotlinlang.org\u002Fdocs\u002Fdata-classes.html",{"title":5,"description":1035},[1059,1060,1061],{"nom":1051,"url":1052},{"nom":1055,"url":1056},{"nom":1062,"url":1063},"Object declarations (en anglais)","https:\u002F\u002Fkotlinlang.org\u002Fdocs\u002Fobject-declarations.html","kotlin\u002F04.classes-et-objets","f4rMwGExtYsaVBmvHoJNnrwRNX2hEiBoSKLVJQrkLsM",[1067,1071,1075,1078,1079,1083,1087],{"path":1068,"title":1069,"stem":1070},"\u002Fkotlin\u002Fdecouvrir-kotlin","Découvrir Kotlin","kotlin\u002F01.decouvrir-kotlin",{"path":1072,"title":1073,"stem":1074},"\u002Fkotlin\u002Fconditions-boucles-fonctions","Conditions, boucles et fonctions","kotlin\u002F02.conditions-boucles-fonctions",{"path":1044,"title":1076,"stem":1077},"La sécurité du null","kotlin\u002F03.securite-du-null",{"path":1042,"title":5,"stem":1064},{"path":1080,"title":1081,"stem":1082},"\u002Fkotlin\u002Fcollections-et-lambdas","Collections et lambdas","kotlin\u002F05.collections-et-lambdas",{"path":1084,"title":1085,"stem":1086},"\u002Fkotlin\u002Fcoroutines-et-compose","Coroutines et Jetpack Compose","kotlin\u002F06.coroutines-et-compose",{"path":1088,"title":1089,"stem":1090},"\u002Fkotlin","Kotlin","kotlin\u002Findex",[1092,1094],{"title":1076,"path":1044,"stem":1077,"description":1093,"children":-1},"Comment Kotlin évite les plantages liés à l'absence de valeur, avec les types nullables, le safe call, l'opérateur Elvis et le cast sûr.",{"title":1081,"path":1080,"stem":1082,"description":1095,"children":-1},"Manipuler des listes, ensembles et dictionnaires, puis les transformer avec des lambdas comme map et filter, sur le thème des recettes.",[1097],{"path":1044,"title":1076,"ligne":49},[1099,1101,1102,1103,1104,1105,1107],{"path":1068,"title":1069,"niveau":1100,"stem":1070},"debutant",{"path":1072,"title":1073,"niveau":1100,"stem":1074},{"path":1044,"title":1076,"niveau":1100,"stem":1077},{"path":1042,"title":5,"niveau":1041,"stem":1064},{"path":1080,"title":1081,"niveau":1041,"stem":1082},{"path":1084,"title":1085,"niveau":1106,"stem":1086},"avance",{"path":1088,"title":1089,"niveau":1108,"stem":1090},"memo",1794583461772]