Ο τύπος bool (συντομογραφία του Boolean, δηλαδή της λογικής τιμής) έχει μόνο δύο τιμές: true και false.
Στον κώδικα, οι τιμές true και false μπορούν να γραφτούν με πεζά ή κεφαλαία γράμματα, χωρίς διαφορά.
<?php
$value_is_true = true;
$value_is_false = false;
Οι τιμές Boolean χρησιμοποιούνται συχνά σε λογικές εκφράσεις ως αποτέλεσμα ενός τελεστή και έπειτα σε δομές ελέγχου.
Υπάρχουν αρκετοί λογικοί τελεστές:
!$a: επιστρέφει true αν το $a δεν είναι true
$a && $b: επιστρέφει true αν το $a και το $b είναι και τα δύο true
$a || $b: επιστρέφει true αν το $a ή το $b είναι true
Υπάρχουν και οι τελεστές and και or, οι οποίοι είναι συμπληρωματικοί των && και || αντίστοιχα.
Δεν συμπεριφέρονται με τον ίδιο τρόπο όπως οι && και || και μπορεί να δώσουν απροσδόκητα αποτελέσματα, γι' αυτό και η χρήση τους αποθαρρύνεται.
Σε αυτή την άσκηση θα υλοποιήσεις τη λογική της αποστολής για ένα νέο παιχνίδι RPG που αναπτύσσει ένας φίλος. Ο κεντρικός χαρακτήρας του παιχνιδιού είναι η Annalyn, ένα γενναίο κορίτσι με ένα άγριο και πιστό σκύλο. Δυστυχώς, η καταστροφή χτυπά, καθώς ο καλύτερός της φίλος απήχθη ενώ έψαχνε για μούρα στο δάσος. Η Annalyn θα προσπαθήσει να βρει και να ελευθερώσει τον καλύτερό της φίλο, παίρνοντας προαιρετικά και τον σκύλο της μαζί της σε αυτή την αποστολή.
Αφού πέρασε κάποιο διάστημα ακολουθώντας τα ίχνη του καλύτερού της φίλου, βρίσκει τον καταυλισμό όπου κρατείται ο φίλος της. Αποδεικνύεται ότι υπάρχουν δύο απαγωγείς: ένας πανίσχυρος ιππότης και ένας πονηρός τοξότης.
Έχοντας βρει τους απαγωγείς, η Annalyn σκέφτεται ποιες από τις παρακάτω ενέργειες μπορεί να κάνει:
Έχεις τέσσερα καθήκοντα: να υλοποιήσεις τη λογική που καθορίζει αν οι παραπάνω ενέργειες είναι διαθέσιμες με βάση την κατάσταση των τριών χαρακτήρων που βρίσκονται στο δάσος και αν ο σκύλος της Annalyn είναι παρών ή όχι.
Υλοποίησε μια συνάρτηση με το όνομα canFastAttack που παίρνει μια τιμή Boolean (λογική τιμή) η οποία δείχνει αν ο ιππότης είναι ξύπνιος.
Η συνάρτηση επιστρέφει true αν η ενέργεια "Γρήγορη επίθεση" είναι διαθέσιμη με βάση την κατάσταση του χαρακτήρα.
Διαφορετικά, επιστρέφει false:
<?php
$is_knight_awake = true;
$infiltration = new AnnalynsInfiltration();
$infiltration->canFastAttack($is_knight_awake);
// => false
Υλοποίησε μια συνάρτηση με το όνομα canSpy που παίρνει τρεις τιμές Boolean, οι οποίες δείχνουν αν ο ιππότης, ο τοξότης και ο φυλακισμένος, αντίστοιχα, είναι ξύπνιοι.
Η συνάρτηση επιστρέφει true αν η ενέργεια "Κατασκοπεία" είναι διαθέσιμη με βάση την κατάσταση των χαρακτήρων.
Διαφορετικά, επιστρέφει false:
<?php
$is_knight_awake = false;
$is_archer_awake = true;
$is_prisoner_awake = false;
$infiltration = new AnnalynsInfiltration();
$infiltration->canSpy($is_knight_awake, $is_archer_awake, $is_prisoner_awake);
// => true
Υλοποίησε μια συνάρτηση με το όνομα canSignal που παίρνει δύο τιμές Boolean, οι οποίες δείχνουν αν ο τοξότης και ο φυλακισμένος, αντίστοιχα, είναι ξύπνιοι.
Η συνάρτηση επιστρέφει true αν η ενέργεια "Σήμα στον φυλακισμένο" είναι διαθέσιμη με βάση την κατάσταση των χαρακτήρων.
Διαφορετικά, επιστρέφει false:
<?php
$is_archer_awake = false;
$is_prisoner_awake = true;
$infiltration = new AnnalynsInfiltration();
$infiltration->canSignal($is_archer_awake, $is_prisoner_awake);
// => true
Υλοποίησε μια συνάρτηση με το όνομα canLiberate που παίρνει τέσσερις τιμές Boolean.
Οι τρεις πρώτες παράμετροι δείχνουν αν ο ιππότης, ο τοξότης και ο φυλακισμένος, αντίστοιχα, είναι ξύπνιοι.
Η τελευταία παράμετρος δείχνει αν ο σκύλος της Annalyn είναι παρών.
Η συνάρτηση επιστρέφει true αν η ενέργεια "Απελευθέρωση του φυλακισμένου" είναι διαθέσιμη με βάση την κατάσταση των χαρακτήρων και την παρουσία του σκύλου της Annalyn.
Διαφορετικά, επιστρέφει false:
<?php
$is_knight_awake = false;
$is_archer_awake = true;
$is_prisoner_awake = false;
$is_dog_present = false;
$infiltration = new AnnalynsInfiltration();
$infiltration->canLiberate(
$is_knight_awake,
$is_archer_awake,
$is_prisoner_awake,
$is_dog_present
);
// => false
Γράψου στο Exercism για να μάθεις και να κατακτήσεις PHP με 11 έννοιες122 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.