name
που περιέχει μια συμβολοσειρά και μια μεταβλητή age
που περιέχει έναν ακέραιο αριθμό.1greeting := "Γειά σου, "
2name := "Κώστας"
3message := greeting + name // Συνένωση συμβολοσειρών
4fmt.Println(message) // Εκτυπώνει "Γειά σου, Κώστας"
5
1var num1 int = 5
2var num2 float64 = 3.14
3sum := num1 + int(num2) // Κάνουμε μετατροπή τύπου
4fmt.Println(sum) // Εκτυπώνει 8
5
1package main
2
3import "fmt"
4
5func main() {
6 var name string = "Δημήτρης"
7 var age int = 28
8 fmt.Printf("Ο %s είναι %d χρονών.\n", name, age)
9}
10
var
ή :=
για να δηλώσετε και να αρχικοποιήσετε.1function createCounter() {
2 let count = 0; // Ο "ιδιωτικός" μετρητής
3 return function() {
4 count += 1; // Αυξάνει τον μετρητή
5 return count;
6 };
7}
8
9const counter = createCounter();
10console.log(counter()); // 1
11console.log(counter()); // 2
12console.log(counter()); // 3
13
createCounter
επιστρέφει μια άλλη συνάρτηση που έχει πρόσβαση στη μεταβλητή count
.setTimeout
.1for (let i = 0; i < 3; i++) {
2 setTimeout(function() {
3 console.log(i); // Εκτυπώνει 0, 1, 2
4 }, 1000);
5}
6
1function greet(name) {
2 return function() {
3 console.log(`Γειά σου, ${name}!`);
4 };
5}
6
7const greetJohn = greet("Ιωάννης");
8greetJohn(); // Γειά σου, Ιωάννης!
9
async/await
.1simple_string = "Γεια σου, κόσμε!"
2complex_string = 'Αυτό είναι μια "πολυδιάστατη" συμβολοσειρά.'
3
1import re
2
3text = "Ο αριθμός είναι 12345."
4match = re.search(r'\d+', text)
5print(match.group()) # εκτυπώνει 12345
6
if
.1age = 20
2
3if age < 18:
4 print("Είσαι ανήλικος.")
5elif age >= 18 and age < 65:
6 print("Είσαι ενήλικος.")
7else:
8 print("Είσαι συνταξιούχος.")
9
==
, !=
, <
, >
και λογικούς τελεστές όπως and
και or
.1fruits = ["μήλο", "πορτοκάλι", "μπανάνα"]
2
3if "μήλο" in fruits:
4 print("Το μήλο είναι στη λίστα.")
5
1user_input = input("Ποιο είναι το όνομά σου; ")
2
3if user_input:
4 print(f"Γεια σου, {user_input}!")
5else:
6 print("Δεν παρείχες όνομα.")
7
times
εκτυπώνει μια γραμμή 10 φορές.1def greet(&block)
2 puts "Γειά σου!"
3 block.call if block_given?
4end
5
6greet { puts "Καλημέρα!" }
7
greet
δέχεται ένα μπλοκ και το εκτελεί εάν υπάρχει.name
μπορεί να έχει μια τιμή τύπου String
ή να είναι nil
.nil
.1if name != nil {
2 print("Το όνομα είναι $name!)")
3} else {
4 print("Δεν υπάρχει όνομα.")
5}
6
if let
if let
, που σας επιτρέπει να κάνετε υποχρεωτική "unwrap" της προαιρετικής μεταβλητής.if let
1if let actualName = name {
2 print("Το όνομα είναι $actualName)")
3} else {
4 print("Δεν υπάρχει όνομα.")
5}
6
guard let
guard let
είναι μια άλλη μέθοδος που σας επιτρέπει να ελέγξετε την τιμή ενός προαιρετικού.guard let
1func printName() {
2 guard let actualName = name else {
3 print("Δεν υπάρχει όνομα.")
4 return
5 }
6 print("Το όνομα είναι $actualName)")
7}
8
force unwrap
!
) μπορεί να προκαλέσει εξαίρεση αν η τιμή είναι nil. Προτιμήστε να χρησιμοποιείτε if let
ή guard let
.Any
(η ρίζα όλων των τύπων στην Kotlin) και θέλετε να την μετατρέψετε σε πιο συγκεκριμένο τύπο, θα χρειαστεί να κάνετε μια μετατροπή.1val anyValue: Any = "Hello, Kotlin"
2val stringValue: String = anyValue as String
3
anyValue
μετατρέπεται σε τύπο String
.as?
. Αν η μετατροπή αποτύχει, η μεταβλητή θα πάρει την τιμή null
αντί να ρίξει εξαίρεση.as?
stringValue
θα είναι null
, καθώς η μετατροπή δεν είναι δυνατή.as
και as?
, μπορείτε να βελτιώσετε την ασφάλεια του κώδικα σας και να διευκολύνετε την αναγνωσιμότητά του. Θυμηθείτε, η προσεκτική προσέγγιση στις μετατροπές τύπου είναι το κλειδί για την ανάπτυξη ποιοτικού λογισμικού.as
και as
;as
προκαλεί σφάλμα αν η μετατροπή αποτύχει, ενώ το as?
επιστρέφει null
.as
, ενώ με as?
θα επιστρέψει null
.as?
ή κάνοντας έλεγχο του τύπου πριν τη μετατροπή.