Διαδρομές
/
Crystal
Crystal
/
Ύλη
/
Βρόχοι `while`
Βρ

Βρόχοι `while` σε Crystal

1 άσκηση

Σχετικά με την έννοια Βρόχοι `while`

Ο βρόχος είναι μια δομή ελέγχου που επιτρέπει σε κώδικα να εκτελείται ξανά και ξανά, με βάση μια συνθήκη.

Βρόχοι while

Ο βρόχος while είναι μια δομή ελέγχου που επιτρέπει σε κώδικα να εκτελείται ξανά και ξανά, με βάση μια συνθήκη. Ο κώδικας μέσα σε έναν βρόχο while συνεχίζει να εκτελείται όσο η συνθήκη αποτιμάται ως truthy. Οι βρόχοι while χρησιμοποιούνται συχνά όταν δεν ξέρεις από πριν πόσες επαναλήψεις θα χρειαστούν, αλλά μπορείς να τους χρησιμοποιήσεις όπου χρειάζεσαι βρόχο.

Η συνθήκη αποτιμάται πριν εκτελεστεί ο κώδικας μέσα στον βρόχο. Αυτό σημαίνει ότι, αν η συνθήκη είναι ψευδής, ο κώδικας μέσα στον βρόχο δεν θα εκτελεστεί ποτέ.

i = 0
while i < 3
  puts i
  i += 1
end

# Output:
# 0
# 1
# 2

Όταν θέλεις να διατρέξεις μια συμβολοσειρά, μπορείς να κάνεις βρόχο με βάση το μήκος της.

str = "Hello"
i = 0
while i < str.size
  puts str[i]
  i += 1
end

# Output:
# H
# e
# l
# l
# o

Βρόχοι until

Οι until βρόχοι λειτουργούν όπως οι βρόχοι while, με τη διαφορά ότι ο κώδικας μέσα στον βρόχο συνεχίζει να εκτελείται μέχρι η συνθήκη να αποτιμηθεί ως truthy. Είναι η ίδια διαφορά που υπάρχει ανάμεσα στο if και στο unless.

i = 0
until i == 3
  puts i
  i += 1
end

Ατέρμονοι βρόχοι

Ένα συχνό σφάλμα με τους βρόχους while είναι να μπεις σε έναν "ατέρμονο βρόχο", από τον οποίο δεν βγαίνεις ποτέ. Ένας ατέρμονος βρόχος μπορεί να προκληθεί από μια συνθήκη που δεν αποτιμάται ποτέ ως truthy ή falsey. Αυτό συνήθως οφείλεται σε λάθος του προγραμματιστή, για παράδειγμα όταν ξεχνάς να αυξήσεις τη μεταβλητή του βρόχου. Μερικές φορές όμως, ο ατέρμονος βρόχος είναι ο πιο ξεκάθαρος τρόπος να υλοποιήσεις τη λογική του προγράμματος. Ή μπορεί να είναι απαραίτητο ο βρόχος να τρέχει για πάντα. Για παράδειγμα, ένας διακομιστής HTTP περιμένει μια εισερχόμενη σύνδεση, την εξυπηρετεί και μετά περιμένει την επόμενη.

break

Με τη λέξη-κλειδί break μπορείς να βγεις νωρίτερα από έναν βρόχο. Αυτό είναι βολικό όταν θέλεις να βγεις νωρίτερα από έναν βρόχο κάτω από ορισμένες συνθήκες.

i = 0
while i <= 3
  puts i
  i += 1
  if i == 2
    break
  end
end

# Output:
# 0
# 1

next

Με τη λέξη-κλειδί next μπορείς να προχωρήσεις κατευθείαν στην επόμενη επανάληψη ενός βρόχου. Αυτό είναι βολικό όταν θέλεις να παραλείψεις συγκεκριμένες επαναλήψεις ενός βρόχου.

i = 0
while i <= 3
  i += 1
  if i == 2
    next
  end
  puts i
end

# Output:
# 1
# 3

Τύποι μέσα σε βρόχο

Ο τύπος μιας μεταβλητής μπορεί να διαφέρει μέσα σε έναν βρόχο. Στο παρακάτω παράδειγμα, ο τύπος της a είναι Int32 | String, επειδή στο πρώτο μέρος του βρόχου μπορεί να είναι Int32 ή String. Η μεταβλητή a έχει τον τύπο Int32 | String μόνο στο πρώτο μέρος του βρόχου, αφού όταν ξεκινά ο βρόχος περιέχει Int32 και στη δεύτερη επανάληψη περιέχει String. Θα εξηγήσουμε αναλυτικά αυτό το σύστημα πολλαπλών τύπων αργότερα. Επειδή όμως είμαστε σίγουροι ότι στο δεύτερο μέρος του βρόχου θα περιέχει μόνο String, ο τύπος της a είναι String στο δεύτερο μέρος του βρόχου. Κατά την εκτέλεση, δεν θα περιέχει ποτέ ταυτόχρονα Int32 και String.

i = 0
a = 4
while i < 3
  p typeof(a)
  # => Int32 | String
  a = "4"
  p typeof(a)
  # => String
  i += 1
end

Το while ως έκφραση

Το while μπορεί να χρησιμοποιηθεί ως έκφραση, δηλαδή ως η τιμή μιας μεταβλητής. Η τιμή που επιστρέφεται είναι αυτή που δίνεις με τη λέξη-κλειδί break. Δεν επιστρέφει την τιμή της τελευταίας έκφρασης μέσα στον βρόχο.

a = while true
  break 1
end

p a
# => 1

i = 0
a = while i == 0
  i += 1
  1
end

p a
# => nil
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα

Μάθε την έννοια Βρόχοι `while`

Η εξάσκηση είναι κλειδωμένη

Ξεκλείδωσε 10 ακόμη ασκήσεις για να εξασκηθείς στην έννοια Βρόχοι `while`