[{"data":1,"prerenderedAt":829},["ShallowReactive",2],{"page-\u002Fkotlin\u002Fdecouvrir-kotlin":3,"pieces-kotlin":787,"autour-\u002Fkotlin\u002Fdecouvrir-kotlin":812,"prerequis-\u002Fkotlin\u002Fdecouvrir-kotlin":817,"plan-kotlin":818},{"id":4,"title":5,"body":6,"description":756,"extension":757,"ligne":70,"meta":758,"motsCles":759,"navigation":762,"niveau":763,"path":764,"prerequis":765,"ressources":766,"seo":778,"sources":779,"stem":785,"__hash__":786},"docs\u002Fkotlin\u002F01.decouvrir-kotlin.md","Découvrir Kotlin",{"type":7,"value":8,"toc":745},"minimark",[9,14,36,40,48,55,58,61,65,113,124,135,139,146,185,195,205,209,290,295,303,312,322,326,408,417,525,538,542,548,599,602,606,619,673,682,688,694,698,741],[10,11,13],"h2",{"id":12},"ce-que-tu-vas-apprendre","Ce que tu vas apprendre",[15,16,17,21,24],"ul",{},[18,19,20],"li",{},"Ce qu'est Kotlin et où on l'utilise.",[18,22,23],{},"Lancer un premier programme dans le navigateur, puis dans IntelliJ IDEA.",[18,25,26,27,31,32,35],{},"Déclarer des valeurs avec ",[28,29,30],"code",{},"val"," et ",[28,33,34],{},"var",", et afficher du texte avec des gabarits.",[10,37,39],{"id":38},"un-langage-moderne","Un langage moderne",[41,42,43,47],"p",{},[44,45,46],"strong",{},"Kotlin"," est un langage de programmation créé par JetBrains. Il est concis et lisible.",[41,49,50,51,54],{},"Il fonctionne sur la ",[44,52,53],{},"JVM",", la machine virtuelle Java qui exécute le code compilé. Si tu as déjà croisé Java, Kotlin s'appuie sur le même socle et peut appeler du code Java. Tu n'as pas besoin de connaître Java pour suivre ce cours.",[41,56,57],{},"Google recommande Kotlin pour développer des applications Android. Tu le retrouveras aussi pour des serveurs et pour du code partagé entre plusieurs plateformes.",[41,59,60],{},"À la rédaction de ce cours (novembre 2026), la dernière version stable est la 2.4.21, publiée en octobre 2026.",[10,62,64],{"id":63},"essayer-sans-rien-installer","Essayer sans rien installer",[66,67,72],"pre",{"className":68,"code":69,"language":70,"meta":71,"style":71},"language-kotlin shiki shiki-themes github-light-default github-dark-default github-dark-default","fun main() {\n    println(\"Bienvenue sur mon site de recettes !\")\n}\n","kotlin","",[28,73,74,91,107],{"__ignoreMap":71},[75,76,79,83,87],"span",{"class":77,"line":78},"line",1,[75,80,82],{"class":81},"sOnC1","fun",[75,84,86],{"class":85},"syCW7"," main",[75,88,90],{"class":89},"scfrF","() {\n",[75,92,94,97,100,104],{"class":77,"line":93},2,[75,95,96],{"class":85},"    println",[75,98,99],{"class":89},"(",[75,101,103],{"class":102},"shWOn","\"Bienvenue sur mon site de recettes !\"",[75,105,106],{"class":89},")\n",[75,108,110],{"class":77,"line":109},3,[75,111,112],{"class":89},"}\n",[41,114,115,116,119,120,123],{},"Ouvre le ",[44,117,118],{},"Kotlin Playground"," (",[28,121,122],{},"play.kotlinlang.org","), colle ce code et lance-le. Le résultat s'affiche sous l'éditeur, directement dans le navigateur.",[41,125,126,127,130,131,134],{},"La fonction ",[28,128,129],{},"main"," est le point de départ du programme. ",[28,132,133],{},"println"," écrit un texte puis passe à la ligne.",[10,136,138],{"id":137},"installer-intellij-idea","Installer IntelliJ IDEA",[41,140,141,142,145],{},"Pour travailler sur de vrais projets, utilise ",[44,143,144],{},"IntelliJ IDEA",", l'éditeur de JetBrains. Il propose Kotlin comme type de projet.",[147,148,149,159,166,169,172,179],"ol",{},[18,150,151,152,155,156,158],{},"Choisis ",[44,153,154],{},"File | New | Project",", puis ",[44,157,46],{}," dans la liste.",[18,160,161,162,165],{},"Donne un nom au projet, par exemple ",[28,163,164],{},"recettes",".",[18,167,168],{},"Choisis un système de build : IntelliJ, Maven ou Gradle.",[18,170,171],{},"Sélectionne un JDK. Tu peux en télécharger un depuis l'assistant.",[18,173,174,175,178],{},"Coche ",[44,176,177],{},"Add sample code"," pour obtenir un fichier d'exemple.",[18,180,181,182,165],{},"Clique sur ",[44,183,184],{},"Create",[41,186,187,188,191,192,194],{},"Ton code se trouve dans ",[28,189,190],{},"src\u002Fmain\u002Fkotlin\u002FMain.kt",". Un clic sur la flèche verte à côté de ",[28,193,129],{}," lance le programme.",[196,197,198],"note",{},[41,199,200,201,204],{},"Un ",[44,202,203],{},"JDK"," (Java Development Kit) est l'outillage Java nécessaire pour compiler et lancer du code sur la JVM. L'assistant d'IntelliJ peut le télécharger pour toi.",[10,206,208],{"id":207},"val-et-var","val et var",[66,210,212],{"className":68,"code":211,"language":70,"meta":71,"style":71},"fun main() {\n    val titre = \"Tarte aux pommes\"\n    var portions = 4\n    portions = 6\n    println(\"$titre pour $portions personnes\")\n}\n",[28,213,214,222,236,250,261,285],{"__ignoreMap":71},[75,215,216,218,220],{"class":77,"line":78},[75,217,82],{"class":81},[75,219,86],{"class":85},[75,221,90],{"class":89},[75,223,224,227,230,233],{"class":77,"line":93},[75,225,226],{"class":81},"    val",[75,228,229],{"class":89}," titre ",[75,231,232],{"class":81},"=",[75,234,235],{"class":102}," \"Tarte aux pommes\"\n",[75,237,238,241,244,246],{"class":77,"line":109},[75,239,240],{"class":81},"    var",[75,242,243],{"class":89}," portions ",[75,245,232],{"class":81},[75,247,249],{"class":248},"s5iOY"," 4\n",[75,251,253,256,258],{"class":77,"line":252},4,[75,254,255],{"class":89},"    portions ",[75,257,232],{"class":81},[75,259,260],{"class":248}," 6\n",[75,262,264,266,268,271,274,277,280,283],{"class":77,"line":263},5,[75,265,96],{"class":85},[75,267,99],{"class":89},[75,269,270],{"class":102},"\"",[75,272,273],{"class":248},"$titre",[75,275,276],{"class":102}," pour ",[75,278,279],{"class":248},"$portions",[75,281,282],{"class":102}," personnes\"",[75,284,106],{"class":89},[75,286,288],{"class":77,"line":287},6,[75,289,112],{"class":89},[41,291,292,294],{},[28,293,30],{}," déclare une valeur en lecture seule. Une fois affectée, elle ne change plus.",[41,296,297,299,300,165],{},[28,298,34],{}," déclare une variable modifiable. On peut lui donner une nouvelle valeur plus tard, comme ",[28,301,302],{},"portions = 6",[41,304,305,306,308,309,311],{},"La documentation conseille de déclarer tout en ",[28,307,30],{}," par défaut, et de passer à ",[28,310,34],{}," seulement quand une valeur doit changer. Tu évites ainsi de modifier une donnée par accident.",[41,313,314,315,318,319,321],{},"Si tu écris ",[28,316,317],{},"titre = \"Autre\""," sur un ",[28,320,30],{},", le compilateur refuse.",[10,323,325],{"id":324},"les-types-de-base","Les types de base",[66,327,329],{"className":68,"code":328,"language":70,"meta":71,"style":71},"val nom: String = \"Ratatouille\"\nval duree: Int = 45\nval prix: Double = 12.5\nval vegetarienne: Boolean = true\nval initiale: Char = 'R'\n",[28,330,331,348,363,378,393],{"__ignoreMap":71},[75,332,333,335,338,342,345],{"class":77,"line":78},[75,334,30],{"class":81},[75,336,337],{"class":89}," nom: ",[75,339,341],{"class":340},"sIXEE","String",[75,343,344],{"class":81}," =",[75,346,347],{"class":102}," \"Ratatouille\"\n",[75,349,350,352,355,358,360],{"class":77,"line":93},[75,351,30],{"class":81},[75,353,354],{"class":89}," duree: ",[75,356,357],{"class":340},"Int",[75,359,344],{"class":81},[75,361,362],{"class":248}," 45\n",[75,364,365,367,370,373,375],{"class":77,"line":109},[75,366,30],{"class":81},[75,368,369],{"class":89}," prix: ",[75,371,372],{"class":340},"Double",[75,374,344],{"class":81},[75,376,377],{"class":248}," 12.5\n",[75,379,380,382,385,388,390],{"class":77,"line":252},[75,381,30],{"class":81},[75,383,384],{"class":89}," vegetarienne: ",[75,386,387],{"class":340},"Boolean",[75,389,344],{"class":81},[75,391,392],{"class":248}," true\n",[75,394,395,397,400,403,405],{"class":77,"line":263},[75,396,30],{"class":81},[75,398,399],{"class":89}," initiale: ",[75,401,402],{"class":340},"Char",[75,404,344],{"class":81},[75,406,407],{"class":102}," 'R'\n",[41,409,200,410,413,414,165],{},[44,411,412],{},"type"," décrit la nature d'une valeur. On l'écrit après le nom, séparé par ",[28,415,416],{},":",[418,419,420,436],"table",{},[421,422,423],"thead",{},[424,425,426,430,433],"tr",{},[427,428,429],"th",{},"Type",[427,431,432],{},"Contenu",[427,434,435],{},"Exemple",[437,438,439,454,469,483,497,511],"tbody",{},[424,440,441,446,449],{},[442,443,444],"td",{},[28,445,357],{},[442,447,448],{},"Nombre entier",[442,450,451],{},[28,452,453],{},"45",[424,455,456,461,464],{},[442,457,458],{},[28,459,460],{},"Long",[442,462,463],{},"Entier plus grand",[442,465,466],{},[28,467,468],{},"350_000_000",[424,470,471,475,478],{},[442,472,473],{},[28,474,372],{},[442,476,477],{},"Nombre décimal",[442,479,480],{},[28,481,482],{},"12.5",[424,484,485,489,492],{},[442,486,487],{},[28,488,387],{},[442,490,491],{},"Vrai ou faux",[442,493,494],{},[28,495,496],{},"true",[424,498,499,503,506],{},[442,500,501],{},[28,502,402],{},[442,504,505],{},"Un seul caractère",[442,507,508],{},[28,509,510],{},"'R'",[424,512,513,517,520],{},[442,514,515],{},[28,516,341],{},[442,518,519],{},"Du texte",[442,521,522],{},[28,523,524],{},"\"Ratatouille\"",[41,526,200,527,530,531,534,535,165],{},[28,528,529],{},"Float",", autre type décimal, demande un ",[28,532,533],{},"f"," à la fin de la valeur, par exemple ",[28,536,537],{},"24.5f",[10,539,541],{"id":540},"linférence-de-type","L'inférence de type",[41,543,544,545,165],{},"Dans l'exemple précédent, tu peux écrire le type, mais ce n'est pas obligatoire. Kotlin le devine à partir de la valeur : c'est l'",[44,546,547],{},"inférence de type",[66,549,551],{"className":68,"code":550,"language":70,"meta":71,"style":71},"val duree = 45        \u002F\u002F Int\nval prix = 12.5       \u002F\u002F Double\nval nom = \"Crêpes\"    \u002F\u002F String\n",[28,552,553,569,584],{"__ignoreMap":71},[75,554,555,557,560,562,565],{"class":77,"line":78},[75,556,30],{"class":81},[75,558,559],{"class":89}," duree ",[75,561,232],{"class":81},[75,563,564],{"class":248}," 45",[75,566,568],{"class":567},"sd6ml","        \u002F\u002F Int\n",[75,570,571,573,576,578,581],{"class":77,"line":93},[75,572,30],{"class":81},[75,574,575],{"class":89}," prix ",[75,577,232],{"class":81},[75,579,580],{"class":248}," 12.5",[75,582,583],{"class":567},"       \u002F\u002F Double\n",[75,585,586,588,591,593,596],{"class":77,"line":109},[75,587,30],{"class":81},[75,589,590],{"class":89}," nom ",[75,592,232],{"class":81},[75,594,595],{"class":102}," \"Crêpes\"",[75,597,598],{"class":567},"    \u002F\u002F String\n",[41,600,601],{},"Les types restent bien présents. Ils sont simplement déduits, pas écrits.",[10,603,605],{"id":604},"les-gabarits-de-chaîne","Les gabarits de chaîne",[41,607,200,608,119,611,615,616,165],{},[44,609,610],{},"gabarit de chaîne",[612,613,614],"em",{},"string template",") insère une valeur dans un texte. Il commence par ",[28,617,618],{},"$",[66,620,622],{"className":68,"code":621,"language":70,"meta":71,"style":71},"val ingredients = 8\nprintln(\"Il y a $ingredients ingrédients\")\nprintln(\"Il y en aura ${ingredients + 2} demain\")\n",[28,623,624,636,653],{"__ignoreMap":71},[75,625,626,628,631,633],{"class":77,"line":78},[75,627,30],{"class":81},[75,629,630],{"class":89}," ingredients ",[75,632,232],{"class":81},[75,634,635],{"class":248}," 8\n",[75,637,638,640,642,645,648,651],{"class":77,"line":93},[75,639,133],{"class":85},[75,641,99],{"class":89},[75,643,644],{"class":102},"\"Il y a ",[75,646,647],{"class":248},"$ingredients",[75,649,650],{"class":102}," ingrédients\"",[75,652,106],{"class":89},[75,654,655,657,659,662,665,668,671],{"class":77,"line":109},[75,656,133],{"class":85},[75,658,99],{"class":89},[75,660,661],{"class":102},"\"Il y en aura ${ingredients ",[75,663,664],{"class":81},"+",[75,666,667],{"class":248}," 2",[75,669,670],{"class":102},"} demain\"",[75,672,106],{"class":89},[41,674,675,677,678,681],{},[28,676,647],{}," insère la valeur d'une variable. ",[28,679,680],{},"${...}"," calcule une expression avant de l'insérer.",[41,683,684,685,687],{},"Le deuxième ",[28,686,133],{}," affiche « Il y en aura 10 demain ».",[689,690,691],"tip",{},[41,692,693],{},"Tu peux modifier chaque exemple dans le Playground et observer le résultat. Change une valeur, relance, compare.",[10,695,697],{"id":696},"à-retenir","À retenir",[15,699,700,703,706,715,726,732],{},[18,701,702],{},"Kotlin est un langage concis qui fonctionne sur la JVM et que Google recommande pour Android.",[18,704,705],{},"Le Kotlin Playground permet d'essayer du code dans le navigateur, sans installation.",[18,707,708,709,712,713,165],{},"IntelliJ IDEA sert à créer de vrais projets Kotlin, avec un fichier ",[28,710,711],{},"Main.kt"," et une fonction ",[28,714,129],{},[18,716,717,719,720,722,723,725],{},[28,718,30],{}," est en lecture seule, ",[28,721,34],{}," est modifiable : préfère ",[28,724,30],{}," par défaut.",[18,727,728,729,165],{},"Kotlin déduit souvent le type d'une valeur, mais tu peux l'écrire avec ",[28,730,731],{},": Type",[18,733,734,31,737,740],{},[28,735,736],{},"$nom",[28,738,739],{},"${expression}"," insèrent des valeurs dans un texte.",[742,743,744],"style",{},"html pre.shiki code .sOnC1, html code.shiki .sOnC1{--shiki-light:#CF222E;--shiki-default:#FF7B72;--shiki-dark:#FF7B72}html pre.shiki code .syCW7, html code.shiki .syCW7{--shiki-light:#8250DF;--shiki-default:#D2A8FF;--shiki-dark:#D2A8FF}html pre.shiki code .scfrF, html code.shiki .scfrF{--shiki-light:#1F2328;--shiki-default:#E6EDF3;--shiki-dark:#E6EDF3}html pre.shiki code .shWOn, html code.shiki .shWOn{--shiki-light:#0A3069;--shiki-default:#A5D6FF;--shiki-dark:#A5D6FF}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 .s5iOY, html code.shiki .s5iOY{--shiki-light:#0550AE;--shiki-default:#79C0FF;--shiki-dark:#79C0FF}html pre.shiki code .sIXEE, html code.shiki .sIXEE{--shiki-light:#953800;--shiki-default:#FFA657;--shiki-dark:#FFA657}html pre.shiki code .sd6ml, html code.shiki .sd6ml{--shiki-light:#6E7781;--shiki-default:#8B949E;--shiki-dark:#8B949E}",{"title":71,"searchDepth":93,"depth":109,"links":746},[747,748,749,750,751,752,753,754,755],{"id":12,"depth":93,"text":13},{"id":38,"depth":93,"text":39},{"id":63,"depth":93,"text":64},{"id":137,"depth":93,"text":138},{"id":207,"depth":93,"text":208},{"id":324,"depth":93,"text":325},{"id":540,"depth":93,"text":541},{"id":604,"depth":93,"text":605},{"id":696,"depth":93,"text":697},"Ce qu'est Kotlin, comment l'essayer dans le navigateur ou dans IntelliJ IDEA, puis les bases avec val, var, les types et les chaînes à gabarits.","md",{},[46,53,118,144,30,34,760,761],"types","gabarits de chaîne",true,"debutant","\u002Fkotlin\u002Fdecouvrir-kotlin",null,[767,771,775],{"nom":768,"url":769,"type":770},"Présentation de Kotlin, cours Principes de base d'Android avec Compose","https:\u002F\u002Fdeveloper.android.com\u002Fcourses\u002Fandroid-basics-compose\u002Fcourse?hl=fr","cours",{"nom":772,"url":773,"type":774,"anglais":762},"Visite guidée de Kotlin, Hello world (en anglais)","https:\u002F\u002Fkotlinlang.org\u002Fdocs\u002Fkotlin-tour-hello-world.html","doc",{"nom":118,"url":776,"type":777,"anglais":762},"https:\u002F\u002Fplay.kotlinlang.org","exercice",{"title":5,"description":756},[780,782],{"nom":781,"url":773},"Documentation de Kotlin (en anglais)",{"nom":783,"url":784},"Créer une application console dans IntelliJ IDEA (en anglais)","https:\u002F\u002Fkotlinlang.org\u002Fdocs\u002Fjvm-get-started.html","kotlin\u002F01.decouvrir-kotlin","NMzxzrwTJCTIilppI7WepR6kAcjGFO-IAi-JBC4QXXo",[788,789,793,797,801,805,809],{"path":764,"title":5,"stem":785},{"path":790,"title":791,"stem":792},"\u002Fkotlin\u002Fconditions-boucles-fonctions","Conditions, boucles et fonctions","kotlin\u002F02.conditions-boucles-fonctions",{"path":794,"title":795,"stem":796},"\u002Fkotlin\u002Fsecurite-du-null","La sécurité du null","kotlin\u002F03.securite-du-null",{"path":798,"title":799,"stem":800},"\u002Fkotlin\u002Fclasses-et-objets","Classes, data classes et objets","kotlin\u002F04.classes-et-objets",{"path":802,"title":803,"stem":804},"\u002Fkotlin\u002Fcollections-et-lambdas","Collections et lambdas","kotlin\u002F05.collections-et-lambdas",{"path":806,"title":807,"stem":808},"\u002Fkotlin\u002Fcoroutines-et-compose","Coroutines et Jetpack Compose","kotlin\u002F06.coroutines-et-compose",{"path":810,"title":46,"stem":811},"\u002Fkotlin","kotlin\u002Findex",[813,815],{"title":46,"path":810,"stem":811,"description":814,"children":-1},"Le mémo de Kotlin : variables, conditions, fonctions, null, classes, collections, coroutines et Jetpack Compose.",{"title":791,"path":790,"stem":792,"description":816,"children":-1},"Prendre des décisions avec if et when, répéter avec for, et regrouper du code dans des fonctions avec valeurs par défaut et arguments nommés.",[],[819,820,821,822,824,825,827],{"path":764,"title":5,"niveau":763,"stem":785},{"path":790,"title":791,"niveau":763,"stem":792},{"path":794,"title":795,"niveau":763,"stem":796},{"path":798,"title":799,"niveau":823,"stem":800},"intermediaire",{"path":802,"title":803,"niveau":823,"stem":804},{"path":806,"title":807,"niveau":826,"stem":808},"avance",{"path":810,"title":46,"niveau":828,"stem":811},"memo",1794583461436]