Crea un messaggio di compleanno in Kotlin

In questo codelab creerai un breve programma Kotlin che stampa un messaggio di compleanno con una torta e un banner di compleanno.

Prerequisiti

  • Come aprire e modificare il codice in https://try.kotlinlang.org/, uno strumento di programmazione Kotlin basato su browser.
  • Scopri il programma "Hello world!" dal codelab sul primo programma di Kotlin.
  • Come utilizzare println() per scrivere testo nella console dell'editor di codice Kotlin online.

Cosa imparerai a fare

  • Come stampare testo più complesso dal tuo programma.
  • Come eseguire calcoli matematici di base in Kotlin e archiviare i risultati in variabili che potrai utilizzare in un secondo momento.
  • Come creare una funzione per stampare la stessa stringa più volte.
  • Come creare un loop che stampa più volte uno snippet di testo.

Cosa devi creare

  • Creerai un breve programma da utilizzare per stampare i messaggi di compleanno, un'immagine testuale e una striscia di una torta.

Cosa serve

  • Un computer con accesso a Internet e un browser web moderno, ad esempio la versione più recente di Chrome.

Configura il tuo codice di avvio

  1. Nel browser, apri https://try.kotlinlang.org/. Si apre uno strumento di programmazione Kotlin basato su browser.
  2. In Esplora file, assicurati che Esempi > Ciao, mondo! > Simplest version > SimplestVersion.kt è selezionato e l'editor di codice mostra il programma Hello world!.
  3. Puoi visualizzare il codice con le modifiche precedenti. Ripristina lo stato originale del programma facendo clic sulla Freccia annulla accanto al nome del file.

  1. Nella definizione di fun main(), rimuovi l'argomento args: Array<String> perché non lo utilizzerai. Viene fornito nel codice fornito per impostazione predefinita nell'editor, ma non è obbligatorio. La prima riga del programma dovrebbe essere simile al seguente codice.
fun main(){
  1. Nella funzione fun main(), sostituisci il testo "Hello, world!" con "Happy Birthday, Rover!".
  2. Sotto, ancora all'interno delle parentesi graffe, aggiungi altre due righe da stampare: "You are already 5!" e "5 is the very best age to celebrate!".

Il codice completato dovrebbe avere questo aspetto.

fun main() {
    println("Happy Birthday, Rover!")
    println("You are already 5!")
    println("5 is the very best age to celebrate!")
}
  1. Esegui il codice.
  2. Verifica che la scheda Console mostri Buon compleanno, Rover! e sotto, Hai già 5 anni! e 5 è l'età migliore per festeggiare!

Aggiungi una torta di compleanno

Un messaggio di compleanno deve avere un'immagine a tema. come una torta. Puoi aggiungere una torta al tuo messaggio di compleanno stampando righe aggiuntive che utilizzano le lettere e i simboli delle tastiere e di println().

Continua dal codice della soluzione riportato sopra.

  1. Nel codice, tra le due istruzioni println() per Happy Birthday e You are already 5, aggiungi le seguenti righe di istruzioni di stampa, come mostrato di seguito. Si crea così una torta. L'ultima istruzione println() non contiene testo tra virgolette, che stampa una riga vuota.
    println("   ,,,,,   ")
    println("   |||||   ")
    println(" =========")
    println("@@@@@@@@@@@")
    println("{~@~@~@~@~}")
    println("@@@@@@@@@@@")
    println("")

Per aiutare gli altri a capire il tuo codice, puoi aggiungere un commento prima di stampare la torta. Se esegui il codice, l'output non avrà alcun aspetto diverso, perché i commenti sono solo informazioni per te e per gli altri sviluppatori, non comandi per il sistema. Un commento incorporato inizia con // seguito da un testo, come mostrato di seguito.

// This is a comment line
// This is another comment
  1. Aggiungi un commento prima di stampare la torta: // Let's print a cake!.
  2. Aggiungi un commento prima di stampare la riga vuota: // This prints an empty line.

Il tuo codice sarà simile al seguente:

fun main() {
    println("Happy Birthday, Rover!")
    
    // Let's print a cake!
    println("   ,,,,,   ")
    println("   |||||   ")
    println(" =========")
    println("@@@@@@@@@@@")
    println("{~@~@~@~@~}")
    println("@@@@@@@@@@@")
    
    // This prints an empty line.
    println("")

    println("You are already 5!")
    println("5 is the very best age to celebrate!")
}
  1. Esegui il codice e l'output dovrebbe essere simile allo screenshot riportato di seguito.

Memorizza l'età di Rover in una variabile

  1. Nel codice completato finora, nota come stai ripetendo lo stesso numero di età due volte.

Anziché ripetere questo numero, puoi memorizzarlo in un unico posto, come variabile. È come inserire il tuo numero in una scatola e assegnare un nome. Puoi quindi utilizzare questo nome di variabile ogni volta che hai bisogno del valore. Inoltre, se l'età cambia, devi solo cambiare il programma in un unico posto. Modificando la variabile, viene stampato il valore corretto dell'età in qualsiasi punto in cui viene utilizzata.

  1. Nel tuo programma, come prima riga di codice all'interno della funzione main(), aggiungi il seguente codice per creare una variabile chiamata age, con il valore 5, come mostrato di seguito. Devi inserire questa riga prima delle istruzioni println().
val age = 5

Questa riga indica che:

  • val è una parola speciale usata da Kotlin, chiamata parola chiave, per indicare che quello che segue è il nome di una variabile.
  • age è il nome della variabile.
  • = rende il valore age a sinistra uguale al valore a destra. In matematica, viene utilizzato un singolo segno di uguale per indicare che i valori su ogni lato sono uguali. In Kotlin, a differenza di quella matematica, viene utilizzato un segno di uguale uguale per assegnare il valore a destra alla variabile denominata a sinistra.

Uno sviluppatore potrebbe dire il seguente: questa riga dichiara una variabile denominata age il cui valore assegnato è 5.

Per utilizzare una variabile all'interno di un'istruzione di stampa, devi racchiuderla tra alcuni simboli che indicano al sistema che ciò che segue non è un testo, ma una variabile. Anziché stampare il testo, il sistema deve stampare il valore della variabile. A tal fine, inserisci la variabile tra parentesi graffe precedute dal simbolo del dollaro, come nell'esempio riportato di seguito.

${variable}
  1. Nel codice, sostituisci il numero 5 in entrambe le dichiarazioni stampa con la variabile age come mostrato di seguito.
println("You are already ${age}!")
println("${age} is the very best age to celebrate!")
  1. Esegui il codice ed entrambi i messaggi dovrebbero mostrare la stessa età.
  2. Modifica il valore della variabile in modo diverso. Ad esempio, potresti mostrare l'età di Rover in giorni anziché in anni. Per farlo, moltiplica l'età per 365, omettendo anni bisestili. Puoi eseguire questo calcolo direttamente quando crei la variabile, come mostrato di seguito.
val age = 5 * 365
  1. Esegui di nuovo il codice e nota che entrambi i messaggi ora mostrano l'età in giorni.

  1. [Facoltativo] Modifica il testo dei messaggi stampati in modo che funzionino meglio con i giorni. Ad esempio, modificali in modo che siano letti:
You are already 1825 days old!
1825 days old is the very best age to celebrate!

Inserire il testo in una variabile

Non solo puoi inserire numeri in variabili, ma anche testo.

  1. Sotto la variabile per age, aggiungi una variabile denominata name per il nome della persona di compleanno e imposta il valore su "Rover".
val name = "Rover"
  1. Sostituisci il nome Rover nel messaggio di compleanno con la variabile, come mostrato di seguito.
println("Happy Birthday, ${name}!")

In un'istruzione di stampa è possibile avere più di una variabile.

  1. Aggiungi Rover al messaggio dell'età utilizzando la variabile name, come mostrato di seguito.
println("You are already ${age} days old, ${name}!")

Il codice completato dovrebbe essere simile al seguente.

fun main() {
    
    val age = 5 * 365
    val name = "Rover"
    
    println("Happy Birthday, ${name}!")
    
    // Let's print a cake!
    println("   ,,,,,   ")
    println("   |||||   ")
    println(" =========")
    println("@@@@@@@@@@@")
    println("{~@~@~@~@~}")
    println("@@@@@@@@@@@")
    
    // This prints an empty line.
    println("")

    println("You are already ${age} days old, ${name}!")
    println("${age} days old is the very best age to celebrate!")
}

Complimenti! Ora puoi creare messaggi con testo, grafica creata da simboli, utilizzare variabili per archiviare numeri e testo e stampare il testo utilizzando le variabili.

In questa attività creerai un banner di compleanno e imparerai come semplificare quel codice utilizzando tecniche per ripetere e riutilizzare il codice e perché è una cosa positiva.

Creare un banner di compleanno iniziale

  1. In https://try.kotlinlang.org/, posiziona il cursore all'interno del codice.
  2. Fai clic con il pulsante destro del mouse per aprire il menu contestuale e scegliere Seleziona tutto (Ctrl-A).
  3. Premi il tasto Backspace o Canc per eliminare tutto il codice.
  4. Copia e incolla il codice riportato di seguito nell'editor.
fun main() {
    println("=======================")
    println("Happy Birthday, Jhansi!")
    println("=======================")
}
  1. Esegui il programma per visualizzare un banner stampato nella console.
=======================
Happy Birthday, Jhansi!
=======================

Crea una funzione per la stampa del bordo

Il codice che hai appena incollato ed eseguito è una funzione chiamata main() che contiene tre istruzioni di stampa. Quando premi il pulsante Esegui, il sistema esegue la funzione e tutto il codice al suo interno.

Il tuo programma Kotlin deve avere sempre una funzione main(). Inoltre, puoi creare e utilizzare funzioni personalizzate. Proprio come le variabili ti consentono di evitare la duplicazione del lavoro, le funzioni ti consentono di evitare di scrivere lo stesso codice più volte. Nel codice, le istruzioni di stampa per la parte superiore e inferiore del banner sono esattamente le stesse. Creiamo e utilizziamo una funzione per stampare tali bordi.

  1. Nell'editor, sotto la funzione main(), inserisci una riga vuota, solo per darti un po' di spazio di lavoro. Il sistema ignora le righe vuote e puoi inserirle ovunque sia utile per organizzare il codice.
  2. Crea una funzione. Inizia con la parola chiave fun, seguita da un nome, printBorder, una coppia di parentesi () e una coppia di parentesi graffe {}, come mostrato di seguito.
fun printBorder() {}

Qualche parola sulle funzioni di denominazione.

  • Nota il nome della funzione printBorder che inizia con una lettera minuscola e un verbo. I nomi delle funzioni iniziano quasi sempre con una lettera minuscola e un verbo e il nome dovrebbe descrivere la funzione della funzione. Ad esempio: print() o qui, printBorder().
  • Nota anche che la seconda parola all'interno del nome inizia con lettere maiuscole. Questo stile è chiamato "camel case" e rende i nomi molto più facili da leggere. Ecco alcuni esempi di nomi: drawReallyCoolFancyBorder e printBirthdayMessage.
  1. Inserisci la parentesi graffa di chiusura } della funzione printBorder su una nuova riga e inserisci una riga vuota tra le due parentesi graffe per darti spazio per aggiungere altro codice. Con la parentesi graffa di chiusura } su una riga separata, è più facile vedere dove termina la funzione.
  2. All'interno della funzione main(), copia l'istruzione di stampa per il bordo e incollala tra parentesi graffe della funzione printBorder().

La funzione printBorder() completata dovrebbe essere simile a questa.

fun printBorder() {
    println("=======================")
}

Per utilizzare o chiamare una funzione, utilizzane il nome tra parentesi. Ecco come utilizzi println()! Per utilizzare la funzione printBorder, richiama printBorder()ovunque nel codice vuoi.

  1. Nella funzione main(), sostituisci le righe di codice che stampano una riga di bordo utilizzando println() con chiamate alla funzione printBorder(). Il codice completato dovrebbe avere questo aspetto.
fun main() {
    printBorder()
    println("Happy Birthday, Jhansi!")
    printBorder()
}

fun printBorder() {
    println("=======================")
}
  1. Esegui il codice per assicurarti che tutto funzioni come prima.

Tieni presente che la modifica del codice per rendere meglio o più semplice lavorare senza modificare l'output viene chiamata "refactoring".

Ripeti un pattern del bordo

Osservando la linea di confine, è di nuovo lo stesso simbolo. Di conseguenza, invece di dire:

"Stampa questa stringa di 23 simboli"

Si potrebbe dire:

"Stampa questo 1 simbolo 23 volte".

Nel codice devi utilizzare un'istruzione repeat().

  1. Nel metodo printBorder(), utilizza un'istruzione repeat() per stampare lo stesso segno 23 volte.
  2. Invece di utilizzare println(), utilizza print() in modo da non passare a una nuova riga dopo la stampa di ciascuna "={quot;.

Ecco il codice. Ora hai una sola istruzione per stampare lo stesso segno e, per ripetere 23 volte, devi utilizzare un'istruzione repeat().

fun printBorder() {
    repeat(23) {
        print("=")
    }
}
  • L'istruzione repeat() inizia con la parola repeat, seguita da (). Questo tipo di istruzione è definito come 'loop' perché ripeti o ripeti lo stesso codice più volte. Imparerai altri modi per creare i loop in un secondo momento.
  • All'interno delle parentesi () è indicato il numero di ripetizioni,
  • seguito da parentesi graffe {},
  • e all'interno delle parentesi graffe {}, è il codice da ripetere.
  1. All'interno del metodo printBorder(), dopo la parentesi graffa di chiusura } dell'istruzione repeat(), ovvero dopo aver finito di stampare la riga del bordo, aggiungi un'istruzione println() per stampare una nuova riga.

Ora il tuo codice dovrebbe essere simile a questo.

fun printBorder() {
    repeat(23) {
        print("=")
    }
    println()
}

Il codice nella funzione main() non cambia e l'intero programma avrà il seguente aspetto.=

fun main() {
    printBorder()
    println("Happy Birthday, Jhansi!")
    printBorder()
}

fun printBorder() {
    repeat(23) {
        print("=")
    }
    println()
}
  1. Esegui il codice. L'output dovrebbe essere lo stesso di prima, ma questa volta hai potuto creare il bordo specificando il simbolo "={quot; una sola volta!
=======================
Happy Birthday, Jhansi!
=======================

Usa gli argomenti per cambiare il bordo

E se volessi creare bordi che utilizzano simboli diversi, come quelli che seguono?

%%%%%%%%%%%%%%%%%%%%%%%

****************************************************

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Puoi definire una funzione distinta per ognuno di questi simboli diversi. Tuttavia, esiste un modo più efficace per riuscirci. Puoi riutilizzare la funzione che hai già scritto e renderla più flessibile, in modo che funzioni per diversi tipi di simboli.

Una caratteristica interessante delle funzioni è che puoi dare loro il tuo contributo utilizzando argomenti. L'hai incontrato per breve tempo in un codelab precedente, quando hai acquisito familiarità con main(). In questo passaggio aggiungerai un argomento alla funzione printBorder(), in modo che possa stampare qualsiasi pattern di bordo che fornisci.

  1. In main(), in alto, crea una variabile denominata border per il pattern del bordo. In questo modo, il testo verrà ripetuto per il bordo.
val border = "%"
  1. Ora, passa la variabile border in entrambe le chiamate alla funzione printBorder() come argomento. In questo modo, inserisci border all'interno delle parentesi (), proprio come quando hai fornito il testo per println() da stampare.

La funzione main() dovrebbe essere simile al seguente codice.

fun main() {
    val border = "%"
    printBorder(border)
    println("Happy Birthday, Jhansi!")
    printBorder(border)
}

La funzione printBorder() prenderà il valore di questo border come input e capirà come stampare il bordo completo.

  1. Esegui il codice.Il tuo codice non viene eseguito e visualizzerai invece le icone di errore accanto al tuo codice.

  1. Esamina la visualizzazione Problemi e visualizzi un messaggio di errore.

Come in precedenza, il messaggio indica dove si trova l'errore e ti dà un'idea di cosa possa essere. La parte importante è: Too many arguments for public fun printBorder(). Stai chiamando la funzione printBorder() e trasmetti un bordo come input. Tuttavia, la definizione della funzione printBorder() non accetta al momento alcun input.

  1. Correggi questo errore aggiungendo un argomento per il bordo alla definizione della funzione printBorder(). Vedi la prima riga di codice come mostrato di seguito.
fun printBorder(border: String) {
    repeat(23) {
        print("=")
    }
    println()
}
  • Nota che il nome dell'argomento è border.
  • Il nome è seguito dai due punti :.
  • e la parola String, che è una descrizione del tipo, o del tipo, dell'argomento.

String è un frammento di testo composto da caratteri racchiusi tra virgolette. Puoi definirlo come perline allineate su una stringa per formare una collana, come dei caratteri allineati per formare parole e testo. Se specifichi che l'argomento deve essere String, viene data al sistema la possibilità di applicare l'argomento come testo e non, ad esempio, un numero.

  1. Esegui il codice. La funzione printBorder() ora accetta un bordo String come input. E il codice in main()chiama printBorder(border) con border come argomento. Il codice deve essere eseguito senza errori.
  2. Guarda l'output del programma nella Console e continua a visualizzare lo stesso bordo di prima?
=======================
Happy Birthday, Jhansi!
=======================

Non è il comportamento previsto. Hai provato a creare un bordo con il simbolo "%", ma il programma sta ancora stampando un bordo con il simbolo "". Nei passaggi successivi scoprirai il motivo.

  1. Nell'editor, nota un punto esclamativo di colore grigio. Questa icona indica un avviso. Gli avvisi riguardano i problemi del codice a cui devi prestare attenzione, ma non impediscono l'esecuzione del codice.

  1. Passa alla Visualizzazione dei problemi e leggi l'avviso. Dice "Parameter 'border' is never used.": questo avviso spiega il problema con l'output. Stai passando una nuova stringa per il bordo alla funzione, ma non la utilizzi per la stampa.
  1. Modifica la funzione printBorder() in modo che utilizzi il valore border passato anziché stampare ""={quot;". Funziona esattamente come se border fosse una variabile definita all'interno della funzione.
fun printBorder(border: String) {
    repeat(23) {
        print(border)
    }
    println()
}
  1. Esegui di nuovo il codice. L'output dovrebbe essere simile all'esempio seguente.
%%%%%%%%%%%%%%%%%%%%%%%
Happy Birthday, Jhansi!
%%%%%%%%%%%%%%%%%%%%%%%

Ottimo lavoro. Hai risolto il problema! Ecco il codice.

fun main() {
    val border = "%"
    printBorder(border)
    println("Happy Birthday, Jhansi!")
    printBorder(border)
}

fun printBorder(border: String) {
    repeat(23) {
        print(border)
    }
    println()
}

Hai reso la funzione printBorder() molto più flessibile, senza aggiungere altro codice. Ora puoi stampare un bordo composto da simboli diversi bastando una piccola modifica.

  1. [Facoltativo] Modificando una sola riga di codice nella funzione main(), come stampare i banner di compleanno, in questo modo?
***********************
Happy Birthday, Jhansi!
***********************
:::::::::::::::::::::::
Happy Birthday, Jhansi!
:::::::::::::::::::::::

Modifica una funzione per avere due argomenti

E se volessi utilizzare un pattern diverso con più di 1 carattere, di' "`-._,-'". Non ripeteresti questo pattern 23 volte perché sarebbe troppo lungo. Puoi ripetere 4 volte. Per farlo, puoi modificare il numero di ripetizioni nell'istruzione repeat() di printBorder(). Tuttavia, puoi fare qualcosa di meglio!

Puoi definire un bordo più elaborato in base a due elementi:

  • La sequenza da ripetere (azione già eseguita)
  • Il numero di volte in cui vuoi ripetere la sequenza

Puoi creare variabili per ogni pattern, pattern e numero di ripetizioni, quindi trasferire entrambe le informazioni nella funzione printBorder().

  1. In main(), modifica il bordo in modo che corrisponda al pattern "`-._,-'".
val border = "`-._,-'"
  1. Esegui il codice e nota che il pattern è troppo lungo.
  2. In main(), sotto la definizione di border, crea una nuova variabile denominata timesToRepeat per il numero di ripetizioni. Imposta il valore su 4.
val timesToRepeat = 4
  1. In main(), quando chiami printBorder(), aggiungi il numero di ripetizioni come secondo argomento. Separa i due argomenti con una virgola.
printBorder(border, timesToRepeat)

La funzione main() dovrebbe avere il seguente aspetto:

fun main() {
    val border = "`-._,-'"
    val timesToRepeat = 4
    printBorder(border, timesToRepeat)
    println("Happy Birthday, Jhansi!")
    printBorder(border, timesToRepeat)
}

Come nell'attività precedente, questo codice restituisce un errore perché hai più argomenti chiamati printBorder() rispetto alla definizione di printBorder().

  1. Correggi il valore printBorder() per accettare anche il numero di ripetizioni inserito. Aggiungi una virgola dopo l'argomento, seguito dall'argomento aggiuntivo: timesToRepeat: Int. La prima riga della definizione della funzione adesso appare come mostrato di seguito.
fun printBorder(border: String, timesToRepeat: Int) {

Attenzione:

  • La virgola separa i due argomenti.
  • timesToRepeat è il nome dell'argomento,
  • seguito dai due punti :
  • e il tipo: Int. timesToRepeat è un numero, quindi invece di impostarlo di tipo String devi impostarlo di tipo Int, che è l'abbreviazione di un numero intero, ovvero un numero intero.
  1. All'interno di printBorder(), modifica repeat in modo da utilizzare l'argomento timesToRepeat (anziché il numero 23). Il tuo codice printBorder() dovrebbe avere questo aspetto.
fun printBorder(border: String, timesToRepeat: Int) {
    repeat(timesToRepeat) {
        print(border)
    }
    println()
}
  1. Esegui il codice. L'output sarà il seguente.
`-._,-'`-._,-'`-._,-'`-._,-'
Happy Birthday, Jhansi!
`-._,-'`-._,-'`-._,-'`-._,-'
  1. Per rendere perfetto l'output, inserisci due spazi all'inizio del messaggio Buon compleanno. A questo punto, il risultato sarà quello mostrato di seguito.
`-._,-'`-._,-'`-._,-'`-._,-'
  Happy Birthday, Jhansi!
`-._,-'`-._,-'`-._,-'`-._,-'

Di seguito è riportato il codice finale del tuo banner:

fun main() {
    val border = "`-._,-'"
    val timesToRepeat = 4
    printBorder(border, timesToRepeat)
    println("  Happy Birthday, Jhansi!")
    printBorder(border, timesToRepeat)
}

fun printBorder(border: String, timesToRepeat: Int) {
    repeat(timesToRepeat) {
        print(border)
    }
    println()
}

Complimenti! Con funzioni, argomenti, variabili e un loop ripetuto, hai appreso i componenti di base utilizzati in quasi tutti i programmi.

Fai una pausa e affronta quindi l'attività successiva, in cui creerai più funzioni e loop e acquisirai la potenza per costruire una torta gigante con il giusto numero di candele con solo poche righe di programmazione.

In questa attività, utilizzerai il codice della torta di compleanno per avere sempre il giusto numero di candele di ogni età.

  • Creerai tre funzioni per disegnare una torta a strati con candele.
  • Utilizzerai un repeat() all'interno di un altro repeat(), creando quello che viene chiamato "anello nidificato".
  • Il modo in cui creerai questo codice sarà il modo in cui puoi creare qualsiasi programma, a partire dal quadro generale e aggiungendo dettagli. Questa attività è chiamata "sviluppo dall'alto verso il basso".
  • Le istruzioni non sono così dettagliate per questa pratica e, in caso di problemi, puoi fare riferimento al codice completato.

Ecco un'immagine della torta che cuocerai:

Ecco le istruzioni.

Crea la funzione principale

  1. Reimposta il codice nell'editor per il programma Hello, world!.
  2. Puoi rimuovere l'argomento in main() perché non lo utilizzerai.
  3. In main(), crea una variabile age e impostala su 24.
  4. In main(), crea una seconda variabile layers e impostala su 5.
  5. In main(), chiama una funzione printCakeCandles() e passa la age. Questo messaggio ti mostrerà un errore perché la funzione non è ancora stata creata.
  6. Allo stesso modo, chiama una funzione printCakeTop() e passa anche in age.
  7. Infine, chiama una funzione printCakeBottom() e trasmetti il valore age e anche il numero layers.
  8. Per eliminare gli errori, commenta le tre chiamate funzione aggiungendo // all'inizio di ogni riga, come mostrato di seguito. Questa tecnica consente di creare la bozza del codice senza attivare errori.
  9. Esegui il programma, per evitare errori e non fare nulla.

La funzione main() dovrebbe essere simile al seguente codice.

fun main() {
    val age = 24
    val layers = 5
    // printCakeCandles(age)
    // printCakeTop(age)
    // printCakeBottom(age, layers)
}

Crea stampaCakeTop()

La funzione printCakeTop() per stampare la parte superiore della torta, una linea di segni uguali, è quasi uguale alla funzione printBorder() creata in precedenza in questo codelab.

==========================
  1. Sotto la funzione main(), aggiungi una riga vuota, quindi crea una funzione, printCakeTop() che prevede un argomento, age, di tipo Int.
  2. All'interno, utilizza un'istruzione repeat() per stampare un segno di uguale age volte più due. I due segni aggiuntivi sono uguali, in modo che le candele non cadano dal lato della torta.
  3. Alla fine, quando l'elemento repeat() è pronto, stampa una riga vuota.
  4. In main(), rimuovi i due simboli // dall'inizio della riga di codice per printCakeTop(), in quanto la funzione è già esistente.
printCakeTop(age)

Ecco la funzione terminata.

fun printCakeTop(age: Int) {
    repeat(age + 2) {
        print("=")
    }
    println()
}
  1. Esegui il codice per vedere la parte superiore della torta.

Crea stampaCakeCandles()

Ogni candela è composta da due simboli. Una virgola , per la fiamma e una linea verticale | per il corpo della candela.

,,,,,,,,,,,,,,,,

||||||||||||||||||||||||

Per eseguire questa operazione in una funzione, inserisci due istruzioni repeat(), una per le fiamme e una per i corpi, nella tua funzione.

  1. Sotto la funzione main() e la funzione printCakeTop(), crea una nuova funzione, printCakeCandles() che richieda un argomento, age, di tipo Int.
  2. All'interno, utilizza un'istruzione repeat() per stampare una virgola , per il carattere.
  3. Ripeti questa operazione age volte.
  4. Alla fine, stampa una riga vuota.
  5. Aggiungi un'istruzione print() per stampare uno spazio per l'inserimento delle candele.
  6. Ripeti la procedura per creare una seconda istruzione repeat() per stampare i corpi delle candele con una linea verticale |.
  7. In main(), rimuovi i due simboli // dall'inizio della riga di codice per printCakeCandles().
printCakeCandles(age)
  1. Esegui il codice per vedere la parte superiore della torta e le candele

Soluzione:

fun printCakeCandles(age: Int) {
    print (" ")
    repeat(age) {
        print(",")
    }    
    println() // Print an empty line   
 
    print(" ") // Print the inset of the candles on the cake
    repeat(age) {
        print("|")
    }    
    println()
}

Crea PrintCakeBottom()

In questa funzione, disegni un fondo di una larghezza pari a age + 2 e lo disegni per un'altezza di uno specifico livello.

@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
  • Ciò significa che la tua funzione richiede due argomenti, uno per la larghezza (age) e uno per l'altezza (layers).
  • Per stampare la parte inferiore della torta, ripeti prima il simbolo 'at' @ age + 2 per stampare un livello. Quindi ripeti la stampa di un livello layers volte.

Ripeti i livelli di disegno

Traccia il simbolo dell'età +2 volte per creare un livello

  1. Sotto le funzioni esistenti, crea una funzione printCakeBottom() con due argomenti, age e layers, entrambi di tipo Int.
  2. All'interno della funzione, utilizza un'istruzione repeat() per stampare un livello di 'at' simboli @ age + 2 volte. Per terminare, stampa una riga vuota, come mostrato di seguito.
fun printCakeBottom(age: Int, layers: Int) {
    repeat(age + 2) {
        print("@")
    }
    println()
}
  1. Esegui il codice per verificare che sia stampata una riga di torta.
 ,,,,,,,,,,,,,,,,,,,,,,,,
 ||||||||||||||||||||||||
==========================
@@@@@@@@@@@@@@@@@@@@@@@@@@

Istruzioni ripeti() nidificate

Per stampare più strati di torta identici, puoi dire:

Per il livello 1, ripeti il simbolo 12 volte: @@@@@@@@@@@

Per il livello 2, ripeti il simbolo 12 volte: @@@@@@@@@@@

Per il livello 3, ripeti il simbolo 12 volte: @@@@@@@@@@@

Oppure puoi dirlo in modo molto più conciso come segue:

Ripeti la procedura per tre livelli:

Ripeti il simbolo 12 volte.

@@@@@@@@@@@

@@@@@@@@@@@

@@@@@@@@@@@

Ora puoi utilizzarlo con le istruzioni repeat(). Puoi inserire un'istruzione repeat() all'interno di un'altra istruzione repeat(). Pertanto, puoi creare un'istruzione repeat() all'interno di un'istruzione repeat() per stampare il simbolo un determinato numero di volte per un determinato numero di livelli.

Facciamo questo per stampare gli strati di torta.

  1. Inserisci una seconda istruzione repeat() attorno a tutto il codice all'interno della funzione. Ripeti questo loop layers volte.
  2. In main(), rimuovi solo i due // dalla riga di codice per printCakeBottom().
printCakeBottom(age, layers)
  1. Esegui il codice per vedere l'intera torta.

Soluzione per printCakeBottom().

fun printCakeBottom(age: Int, layers: Int) {
    repeat(layers) {
        repeat(age + 2) {
            print("@")
        }
        println()
    }    
}

Complimenti! Hai appena terminato un programma piuttosto complesso con diverse funzioni e un'istruzione repeat nidificata. E la tua torta avrà sempre il giusto numero di candele!

L'output finale del tuo programma dovrebbe essere:

 ,,,,,,,,,,,,,,,,,,,,,,,,
 ||||||||||||||||||||||||
==========================
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@

Codice soluzione

fun main() {
    val age = 24
    val layers = 5
    printCakeCandles(age)
    printCakeTop(age)
    printCakeBottom(age, layers)
}

fun printCakeCandles(age: Int) {
    print (" ")
    repeat(age) {
          print(",") // Print an empty line
    }    
    println()    

    print(" ") // Print the inset of the candles on the cake
    repeat(age) {
        print("|")
    }    
    println()
}

fun printCakeTop(age: Int) {
    repeat(age + 2) {
        print("=")
    }
    println()
}

fun printCakeBottom(age: Int, layers: Int) {
    repeat(layers) {
        repeat(age + 2) {
            print("@")
        }
        println()
    }    
}
  • Utilizza ${} per racchiudere le variabili e i calcoli nel testo delle istruzioni di stampa. Ad esempio: ${age}, dove age è una variabile.
  • Crea una variabile utilizzando la parola chiave val e un nome. Una volta impostato, questo valore non può essere modificato. Assegna un valore a una variabile utilizzando il segno di uguale. Esempi di valori sono il testo e i numeri.
  • String è un testo racchiuso tra virgolette, ad esempio "Hello".
  • Un Int è un numero intero positivo o negativo, come 0, 23 o -1024.
  • Puoi inserire uno o più argomenti in una funzione utilizzabile dalla funzione, ad esempio:
    fun printCakeBottom(age:Int, layers:Int) {}
  • Utilizza un'istruzione repeat() {} per ripetere più volte un insieme di istruzioni. Ad esempio: repeat (23) { print('%") } o repeat (layers) { print("@@@@@@@@@@") }
  • Un loop è un'istruzione che richiede di ripetere le istruzioni più volte. Un'istruzione repeat() è un esempio di loop.
  • Puoi nidificare i loop, ovvero inserire i loop all'interno dei loop. Ad esempio, puoi creare un'istruzione repeat() all'interno di un'istruzione repeat() per stampare un simbolo per un numero di righe diverse, come hai fatto per i livelli di torta.

Riepilogo dell'utilizzo di argomenti funzione: per utilizzare gli argomenti con una funzione, devi eseguire tre operazioni:

  • Aggiungi l'argomento e digita alla definizione della funzione: printBorder(border: String)
  • Utilizza l'argomento all'interno della funzione: println(border)
  • Fornisci l'argomento quando chiami la funzione: printBorder(border)

Ecco la documentazione ufficiale sui concetti Kotlin appresi in questo codelab.

Se lo strumento di programmazione Kotlin basato su browser non esegue il tuo codice o restituisce un errore come quello riportato di seguito, puoi provare quanto segue.

  • Ricarica la pagina utilizzando SHIFT-Reload.
  • Attendi un minuto e riprova.