Selektion används när någonting ska hända beroende på ett villkor.
Ofta vill man ha ett vägval i sitt program, där en del kod ska köras bara i vissa fall. Då kan man använda sig av en if-sats (om-sats på svenska). Sådana satser kan ha lite olika former, beroende på hur många fall du vill välja mellan. Du hittar den i kategorin Logik. I den minsta formen ser den ut så här i block och text:
if (true) { }
På platsen där det står platshållare ”sant” (true) ska du bygga villkoret, som man kan se som en fråga som ställs till datorn (”Är detta villkor sant?”). Om svaret på frågan blir att det är sant, då kommer koden som ligger på insidan, till höger av ”då”, köras. Om det inte är sant, händer det inte. Block för att bygga villkoret med (t.ex. lika med, mindre än) hittar du i samma kategori, Logik.
Exempel
if (poäng > 10) { basic.showString("Du vann!") }
I det här exempel ställer vi frågan ”Är värdet av variabeln poäng mer än 10?” och om det är sant, då visas texten ”Du vann!” på skärmen.
För att lära mer om hur man bygger villkor och kombinerar dom, gå hit.
Utökad form
Svaret på frågan (villkoret) blir alltid antingen sant eller falskt. Om man vill att något annat händer när svaret blir falskt, kan man utöka om-då till om-då-annars (if-then-else). Det kan se ut såhär:
if (input.temperature() < 20) { basic.showString("Kallt!") } else { basic.showString("Varmt!") }
Här visas antingen text ”Kallt!” eller ”Varmt” på skärmen, beroende på om temperaturen är mindre än 20 grader (då / then) eller inte (annars / else).
Koppla ihop flera frågor
Ibland vill man ha fler än bara två läge, och då kan man skilja mellan dom med hjälp av flera sådana frågor (villkor). Det gör man genom att ha ett eller flera ”annars om” (else if) delar som direkt ställer en ny fråga. För att lägga till det i block läget ska man trycka på det lila, blåa kuggikonen som finns på om-då blocket. Då kommer upp ett litet fönster där du kan pussla till delar till och från sitt om-då block för att ändra den. Efter det stänger man den igen genom att trycka på samma blåa ikon.
På det här sättet kan man till exempel bygga följande program, som berättar i mer detalj vilken temperatur det är:
if (input.temperature() < 5) { basic.showString("Super kallt!") } else if (input.temperature() < 20) basic.showString("Kallt!") } else if (input.temperature() < 25) { basic.showString("Lagom temperatur!") } else { basic.showString("Varmt!") }
Nu, om det är mindre än 5 grader visas ”Super kallt!”, annars om det är minder än 20 visas ”Kallt!”, annars om det är mindre än 25 visas ”Lagom temperatur!”, annars visas ”Varmt!”
Vad är skillnaden?
Nu tänker du kanske, varför ska jag ha ”annars om” om jag också bara kan duplicera min första ”om då” block, och klistra flera efter varandra? Det finns en skillnad, vilket är viktigt om de olika läge vi skiljer mellan inte uteslutar varandra. Titta på följande exempel, i två varianter. Vad kommer bli resultatet av båda?
if (input.lightLevel() < 128) { basic.showString("Morkt!") } if (input.temperature() < 20) { basic.showString("Kallt!") }
if (input.lightLevel() < 128) { basic.showString("Morkt!") } else if (input.temperature() < 20) { basic.showString("Ljust och kallt!") }
I första varianten är det två frågor som ställs efter varandra. Först: Är det mörkt? Då visa texten ”Morkt!”. Sen: Är det kallt? Då visa texten ”Kallt!”. Resultatet på frågorna hänger inte ihop. Så man kan få båda texter, ifall det är båda mörkt och kallt. Eller så får man en av dom, eller ingen alls.
I andra varianten blir frågan om temperatur bara ställd om svaret på den första var falskt (alltså inte mörkt). Så antingen är det mörkt och får man texten ”Morkt!”, eller, om det inte är mörkt och det är kallt får man texten ”Ljust och kallt!”, eller så får man ingen text.