Per dichiarare una variabile, usa l'operatore di assegnazione =.
In Crystal, le variabili dovrebbero usare il formato snake_case.
number = 1
puts number # => 1
number = 2
puts number # => 2
Le costanti si dichiarano usando lo stesso operatore di assegnazione =, ma usano solo lettere maiuscole, note come SCREAMING_SNAKE_CASE.
NUMBER = 1
puts NUMBER # => 1
Assegnare un valore a una costante già definita produrrà un errore in fase di compilazione.
NUMBER = 1
NUMBER = 2
# Error: already initialized constant NUMBER
Crystal è un linguaggio compilato, il che significa che a ogni variabile o argomento di un metodo viene assegnato un tipo in fase di compilazione. Il compilatore è in grado di dedurre il tipo di una variabile o di un argomento di un metodo. Tuttavia, in alcuni casi è necessario specificare il tipo. I casi che richiedono di impostare un tipo verranno spiegati nei concetti successivi.
I metodi sono un modo per raggruppare un insieme di istruzioni che possono essere riutilizzate.
In Crystal, i metodi sono spesso definiti in una classe, un modulo o una struct.
Tuttavia, i metodi possono anche essere definiti all'esterno di una classe, un modulo o una struct.
I metodi si dichiarano con la parola chiave def, seguita dal nome del metodo.
In Crystal, i metodi dovrebbero essere scritti in snake_case.
Puoi omettere le parentesi tonde quando un metodo non ha argomenti.
Per dichiarare la fine di un metodo, devi usare la parola chiave end.
def hello
puts "Hello World!"
end
Usare un metodo che non esiste per il tipo di una variabile o di un argomento di un metodo produrrà un errore in fase di compilazione.
number = 1
number + "1"
# Error: no overload matches 'Int32#+' with type String
I metodi possono avere argomenti. Gli argomenti sono dati che vengono passati a un metodo. Per poter passare argomenti a un metodo, devi specificare il nome dell'argomento. In Crystal, gli argomenti dovrebbero essere scritti in snake_case. Un metodo può avere più argomenti, ma gli argomenti devono essere separati da una virgola.
def hello(name)
puts "Hello #{name}!"
end
I metodi possono anche avere più argomenti. In questo caso, gli argomenti devono essere separati da una virgola.
def hello(name, language)
puts "Hello #{name}! You are learning #{language}."
end
Quando chiami un metodo che appartiene a una classe, un modulo o una struct, devi usare l'operatore punto (.).
Il formato dovrebbe essere: <ClassName>.<method_name>.
Quando un metodo non appartiene a una classe, un modulo o una struct, puoi semplicemente chiamarlo scrivendone il nome.
I metodi restituiscono sempre implicitamente il valore dell'ultima espressione.
Quando un metodo ha argomenti, puoi usare le parentesi tonde quando specifichi gli argomenti nella chiamata e nella definizione del metodo, come segue: <method_name>(<argument_1>, <argument_2>, ...).
Quando un metodo non ha argomenti, le parentesi dovrebbero essere omesse.
def hello(name)
"Hello #{name}!"
end
hello("Crystal")
# => Hello Crystal!
Quando chiami un metodo con più argomenti, gli argomenti devono essere separati da una virgola. Gli argomenti devono essere indicati nello stesso ordine degli argomenti del metodo.
def hello_language(name, language)
"Hello #{name}! You are learning #{language}."
end
hello_language("World", "Crystal")
# => Hello World! You are learning Crystal.
Chiamare un metodo con un numero di argomenti errato produrrà un errore in fase di compilazione.
hello_language("Crystal")
# wrong number of arguments for 'hello_language' (given 1, expected 2)
In Crystal, puoi usare l'operatore + per sommare due numeri.
Puoi anche usare l'operatore - per sottrarre due numeri.
E puoi usare l'operatore * per moltiplicare due numeri.
1 + 1
# => 2
2 - 1
# => 1
2 * 2
# => 4
In Crystal, i commenti si scrivono con il carattere #, seguito da uno spazio e poi dal commento.
I commenti servono a documentare il codice.
Il compilatore non esegue i commenti.
# This is a comment
In questo esercizio, scriverai il codice che ti aiuterà a cucinare una lasagna strepitosa dal tuo ricettario preferito.
Hai quattro compiti, tutti legati al tempo impiegato per cucinare la lasagna.
Definisci la costante EXPECTED_MINUTES_IN_OVEN nella classe Lasagna, che memorizza per quanti minuti la lasagna deve stare in forno.
Secondo il ricettario, il tempo di cottura previsto in minuti è 40:
Lasagna::EXPECTED_MINUTES_IN_OVEN
# => 40
Definisci il metodo Lasagna#remaining_minutes_in_oven che prende come parametro i minuti effettivi che la lasagna è stata in forno e restituisce quanti minuti la lasagna deve ancora restare in forno, in base al tempo di cottura previsto in minuti del compito precedente.
Lasagna.new.remaining_minutes_in_oven(30)
# => 10
Definisci il metodo Lasagna#preparation_time_in_minutes, che prende come parametro il numero di strati che hai aggiunto alla lasagna e restituisce il numero di minuti che hai impiegato per prepararla, supponendo che ogni strato richieda 2 minuti di preparazione.
Lasagna.new.preparation_time_in_minutes(2)
# => 4
Definisci il metodo Lasagna#total_time_in_minutes che prende due parametri denominati: il parametro number_of_layers è il numero di strati che hai aggiunto alla lasagna, ed il parametro actual_minutes_in_oven è il numero di minuti che la lasagna è stata in forno.
Il metodo deve restituire il numero totale di minuti che hai dedicato a cucinare la lasagna, cioè la somma del tempo di preparazione in minuti e del tempo che la lasagna ha passato in forno fino a questo momento.
number_of_layers = 3
actual_minutes_in_oven = 20
Lasagna.new.total_time_in_minutes(number_of_layers, actual_minutes_in_oven)
# => 26
Iscriviti a Exercism per imparare e padroneggiare Crystal con 26 concetti142 esercizi e il mentoring di persone reali, tutto gratis.