{"id":13092,"date":"2017-06-16T17:54:25","date_gmt":"2017-06-16T15:54:25","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=13092"},"modified":"2017-08-22T19:03:38","modified_gmt":"2017-08-22T17:03:38","slug":"kotlin-costrutto-if-e-cicli-for-con-il-nuovo-linguaggio-android","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/kotlin-costrutto-if-e-cicli-for-con-il-nuovo-linguaggio-android\/","title":{"rendered":"Kotlin: costrutto if e cicli for con il nuovo linguaggio Android"},"content":{"rendered":"<p>L&#8217;aspetto dominante di qualsiasi tecnologia di programmazione consiste nella <strong>gestione del flusso di esecuzione<\/strong> comprendendo con tale espressione sia la <strong>programmazione condizionale<\/strong> (ambito dominato tipicamente dal <strong>costrutto <em>if<\/em><\/strong>) sia la gestione iterativa delle operazioni, il cui re \u00e8 il <strong>ciclo <em>for<\/em><\/strong>. Stiamo per vedere entrambi questi aspetti al lavoro in Kotlin: gli esempi sono <a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2017\/06\/02-ControlloFlusso.zip\" target=\"_blank\" rel=\"noopener\">scaricabili qui<\/a>.<\/p>\n<h2>Programmazione condizionale: if &#8230; else if &#8230; else<\/h2>\n<p>La <strong>sintassi del costrutto <em>if<\/em><\/strong> \u00e8 equivalente a quella di Java e, di conseguenza, particolarmente affine al linguaggio C. Innanzitutto, \u00e8 importante conoscere:<\/p>\n<ul>\n<li>gli <strong>operatori di confronto<\/strong> che permetteranno di comparare valori ed ottenere un risultato di tipo booleano (<em>true<\/em> o <em>false<\/em> ossia &#8220;vero&#8221; o &#8220;falso&#8221;). Gli operatori di confronto sono:<strong> &gt; (maggiore)<\/strong>, <strong>&lt; (minore)<\/strong>, <strong>== (uguale)<\/strong>, <strong>&gt;= (maggiore o uguale)<\/strong>,\u00a0<strong>&lt;= (minore o uguale) <\/strong>e\u00a0<strong>!= (diverso)<\/strong>;<\/li>\n<li>gli <strong>operatori logici<\/strong> che permettono di concatenare pi\u00f9 valori booleani o risultato di confronti: <strong>&amp;&amp; (<em>and<\/em> logico)<\/strong> che restituisce &#8220;vero&#8221; solo se viene usato con operandi equivalenti entrambi al valore booleano <em>true<\/em>; <strong>|| (<em>or<\/em> logico)<\/strong> che per fornire un risultato <em>true<\/em> richiede che almeno uno dei due operandi coinvolti nel confronto rappresenti il valore &#8220;vero&#8221;; <strong>! (<em>not<\/em>)<\/strong> un operatore unario che inverte il valore booleano che lo segue.<\/li>\n<\/ul>\n<p>Il costrutto <strong><em>if<\/em> determina se devono essere eseguite le operazioni indicate, in base ad un valore booleano<\/strong> contenuto in una variabile o restituito come risultato di un&#8217;espressione. Per porre <strong>condizioni alternative<\/strong> si pu\u00f2 utilizzare la parola chiave <em><strong>else<\/strong> <\/em>(alternativa incondizionata) o <em><strong>else if<\/strong><\/em> che pone un&#8217;ulteriore condizione da valutare.<\/p>\n<p>Passiamo subito ad un <strong>esempio<\/strong>: realizziamo una funzione che in base all&#8217;et\u00e0 dello spettatore o all&#8217;esistenza di un abbonamento decide a quanto ammonta il prezzo del biglietto. Queste le regole: gratuito per spettatori abbonati, 5 euro per minorenni e ultra-sessantacinquenni, 7 euro (prezzo intero) per tutti gli altri.<\/p>\n<p>Questo \u00e8 il codice della <strong>funzione che determina il prezzo del biglietto<\/strong> da pagare:<\/p>\n<pre class=\"lang:java decode:true\">fun prezzoBiglietto(etaSpettatore: Int, abbonato: Boolean): Float\r\n{\r\n   if (abbonato)\r\n     {\r\n\t\/\/ spettatore abbonato non paga\r\n\treturn 0.0f;\r\n     }\r\n   else if (etaSpettatore&lt;18 || etaSpettatore&gt;=65)\r\n     return 5.0f\r\n   return 7.0f;\r\n}<\/pre>\n<p>Nella funzione <em>main<\/em> viene utilizzata <em>prezzoBiglietto<\/em> e coinvolta nella valutazione di tre diversi spettatori.<\/p>\n<pre class=\"lang:java decode:true\">fun main(args : Array&lt;String&gt;) {\r\n\t\r\n\t\/\/ condizioni Spettatore1\r\n\tval etaSpettatore1=45\r\n\tval abbonatoSpettatore1=true\r\n\t\r\n\t\/\/ condizioni Spettatore2\r\n\tval etaSpettatore2=70\r\n\tval abbonatoSpettatore2=false\r\n\t\r\n\t\/\/ condizioni Spettatore3\r\n\tval etaSpettatore3=45\r\n\tval abbonatoSpettatore3=false\r\n\t\r\n\tprintln(\"Lo spettatore1 paga ${prezzoBiglietto(etaSpettatore1, abbonatoSpettatore1)}\")\r\n\tprintln()\r\n\tprintln(\"Lo spettatore2 paga ${prezzoBiglietto(etaSpettatore2, abbonatoSpettatore2)}\")\r\n\tprintln()\r\n\tprintln(\"Lo spettatore3 paga ${prezzoBiglietto(etaSpettatore3, abbonatoSpettatore3)}\")\r\n}<\/pre>\n<p>Notare ancora l&#8217;uso dei template all&#8217;interno di stringhe per una formattazione dell&#8217;output che non richiede concatenazioni.<\/p>\n<h2>Il ciclo for<\/h2>\n<p>Il <strong>ciclo for \u00e8 il costrutto basilare per eseguire operazioni iterative<\/strong>. Lo scopo pu\u00f2 essere vario: dalla semplice ripetizione di attivit\u00e0 all&#8217;analisi di una struttura dati fino ad un&#8217;elaborazione che necessiti della ricorsione di alcuni passi.<\/p>\n<p>Per una delle modalit\u00e0 di impiego basilari, <strong>Kotlin offre una sintassi del ciclo <em>for<\/em> molto essenziale<\/strong> in cui chiederemo che una variabile contatore assuma ogni valore di un intervallo specifico, ognuno dei quali sar\u00e0 reso disponibile in una diversa iterazione del ciclo.<\/p>\n<p>Il nostro <strong>esempio<\/strong> offre tre conteggi effettuati utilizzando il ciclo <em>for<\/em>: il primo stampa tutti i numeri da 1 a 10, il secondo la medesima sequenza ma in ordine inverso, il terzo tutti i numeri da 18 a 45 saltandone due:<\/p>\n<pre class=\"lang:java decode:true \">fun main(args : Array&lt;String&gt;) {\r\n\t \r\n  println(\"Contare da 1 a 10...\")\r\n  for (x in 1..10) {\r\n\tprintln(x)\r\n  }\r\n  \r\n  println(\"\\nContare a ritroso da 10 a 1\")\r\n\t\r\n  for (x in 10 downTo 1) {\r\n\tprintln(x)\r\n  }\r\n\t\r\n  println(\"\\nContare da 18 a 45 saltandone 2\")\r\n\t\r\n  for (x in 18..45 step 3) {\r\n\tprintln(x)\r\n  }\r\n\t\r\n}<\/pre>\n<h2>Conclusioni<\/h2>\n<p>Come si sa, cicli e costrutti condizionali sono tematiche onnipresenti nei progetti informatici, pertanto \u00e8 indispensabile imparare ad usarli bene. Kotlin ci viene incontro sfruttando la sintassi di Java, particolarmente conosciuta, oltre a sue innovazioni che la rendono pi\u00f9 snella.<\/p>\n<p>Continueremo il nostro viaggio in Kotlin e di sorprese ne arriveranno ancora molte!<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>L&#8217;aspetto dominante di qualsiasi tecnologia di programmazione consiste nella gestione del flusso di esecuzione comprendendo con tale&#8230;<\/p>\n","protected":false},"author":561,"featured_media":13086,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1682,1],"tags":[1278,1968],"class_list":["post-13092","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android","category-tutorial-pratici","tag-android","tag-kotlin"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/13092","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/561"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=13092"}],"version-history":[{"count":7,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/13092\/revisions"}],"predecessor-version":[{"id":13104,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/13092\/revisions\/13104"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media\/13086"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=13092"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=13092"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=13092"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}