Στα περισσότερα γλώσσες υπολογιστών, η περίπτωση ή η υπό όρους (επίσης γνωστή ως διακόπτης) δήλωση συγκρίνει την τιμή μιας μεταβλητής με την τιμή πολλών σταθερών ή κυριολεκτικών γραμμών και εκτελεί την πρώτη διαδρομή με μια αντίστοιχη περίπτωση. Σε Ρουμπίνι, είναι λίγο πιο ευέλικτο (και ισχυρό).
Αντί να πραγματοποιηθεί ένας απλός έλεγχος ισότητας, χρησιμοποιείται ο χειριστής ισότητας των υποθέσεων, ανοίγοντας την πόρτα σε πολλές νέες χρήσεις.
Ωστόσο, υπάρχουν κάποιες διαφορές από άλλες γλώσσες. Σε ντο, μια δήλωση διακόπτη είναι ένα είδος αντικατάστασης για μια σειρά από αν και goto δηλώσεις. Οι περιπτώσεις είναι τεχνικά ετικέτες και το διακόπτη θα πάει στην ετικέτα που ταιριάζει. Αυτό παρουσιάζει μια συμπεριφορά που ονομάζεται "fallthrough", καθώς η εκτέλεση δεν σταματά όταν φτάσει σε άλλη ετικέτα.
Αυτό συνήθως αποφεύγεται χρησιμοποιώντας μια δήλωση σπάσει, αλλά fallthrough είναι μερικές φορές σκόπιμη. Η δήλωση της υπόθεσης Ruby, από την άλλη πλευρά, μπορεί να θεωρηθεί ως μια σύντομη περιγραφή μιας σειράς
αν δηλώσεις. Δεν υπάρχει πτώση, θα εκτελεστεί μόνο η πρώτη περίπτωση αντιστοίχισης.Η βασική μορφή δήλωσης υποθέσεων
Η βασική μορφή μιας δικογραφίας είναι η εξής.
Όπως μπορείτε να δείτε, αυτό είναι δομημένο σαν ένα if / else if / else conditional statement. Το όνομα (το οποίο θα καλέσουμε το αξία), σε αυτήν την περίπτωση που εισάγεται από το πληκτρολόγιο, συγκρίνεται με κάθε μία από τις περιπτώσεις από το πληκτρολόγιο πότε ρήτρες (δηλ. περιπτώσεις), και το πρώτο όταν το μπλοκ με μια αντίστοιχη περίπτωση θα εκτελεστεί. Εάν καμία από αυτές δεν ταιριάζει, το αλλού μπλοκ θα εκτελεστεί.
Αυτό που είναι ενδιαφέρον είναι εδώ πως η τιμή συγκρίνεται με κάθε μία από τις περιπτώσεις. Όπως αναφέρθηκε παραπάνω, στο C ++, και άλλες γλώσσες τύπου C, χρησιμοποιείται μια απλή σύγκριση τιμών. Στο Ruby χρησιμοποιείται ο χειριστής ισότητας των περιπτώσεων.
Θυμηθείτε ότι ο τύπος της αριστεράς πλευράς ενός χειριστή ισότητας των υποθέσεων είναι σημαντικός και οι περιπτώσεις είναι πάντα η αριστερή πλευρά. Έτσι, για καθένα πότε Ruby θα αξιολογήσει περίπτωση μέχρι να βρει έναν αγώνα.
Αν ήμασταν να εισάγουμε Βαρίδι, Ο Ruby θα αξιολογήσει πρώτα "Αλίκη" "Bob", που θα ήταν ψευδής από τότε Σειρά# ορίζεται ως η σύγκριση των χορδών. Επόμενο, /[qrz].+/i "Bob" θα εκτελεστεί, πράγμα που είναι ψευδές από τότε Βαρίδι δεν ξεκινάει με Q, R ή Z.
Δεδομένου ότι καμία από τις περιπτώσεις δεν ταιριάζει, τότε ο Ruby θα εκτελέσει τη ρήτρα else.
Πώς πλησιάζει ο Τύπος
Μια κοινή χρήση της δήλωσης περίπτωσης είναι να προσδιοριστεί ο τύπος της αξίας και να γίνει κάτι διαφορετικό ανάλογα με τον τύπο του. Παρόλο που αυτό σπάει την συνήθη δακτυλογράφηση του Ruby, είναι μερικές φορές απαραίτητο να γίνουν τα πράγματα.
Αυτό λειτουργεί χρησιμοποιώντας το Τάξη# (τεχνικά, το Μονάδα μέτρησης#), η οποία ελέγχει αν η δεξιά πλευρά είναι ένα? αριστερή πλευρά.
Η σύνταξη είναι απλή και κομψή:
Μια άλλη πιθανή φόρμα
Αν το αξία παραλείπεται, η δήλωση περίπτωσης λειτουργεί λίγο διαφορετικά: λειτουργεί σχεδόν ακριβώς όπως μια εντολή if / else if / else. Τα πλεονεκτήματα της χρήσης της δήλωσης της υπόθεσης σε ένααν δήλωση, στην προκειμένη περίπτωση, είναι απλώς καλλυντικά.
Μια πιο σύνθετη σύνταξη
Υπάρχουν φορές που υπάρχει ένας μεγάλος αριθμός μικρών πότε ρήτρες. Μια τέτοια δήλωση περίπτωσης μεγαλώνει πολύ μεγάλο για να ταιριάζει στην οθόνη. Όταν αυτό συμβαίνει (δεν υπάρχει λογοπαίγνιο), μπορείτε να χρησιμοποιήσετε το έπειτα λέξη-κλειδί για να βάλετε το σώμα του πότε στην ίδια γραμμή.
Ενώ αυτό κάνει για κάποιο πολύ πυκνό κώδικα, εφ 'όσον κάθε ένας πότε ρήτρα είναι πολύ παρόμοια, γίνεται στην πραγματικότητα περισσότερο αναγνώσιμος.
Όταν πρέπει να χρησιμοποιείτε μονόγραμμη και πολυγραμμική όταν οι ρήτρες εξαρτώνται από εσάς, είναι θέμα ύφους. Ωστόσο, η ανάμιξη των δύο δεν συνιστάται - μια δήλωση περίπτωσης πρέπει να ακολουθεί ένα πρότυπο ώστε να είναι όσο το δυνατόν πιο αναγνώσιμο.
Εκχώρηση υποθέσεων
Όπως και οι δηλώσεις, οι δηλώσεις υποθέσεων αξιολογούνται στην τελευταία δήλωση στο πότε ρήτρα. Με άλλα λόγια, μπορούν να χρησιμοποιηθούν σε αναθέσεις για να δώσουν ένα είδος πίνακα. Ωστόσο, μην ξεχνάτε ότι οι δηλώσεις περίπτωσης είναι πολύ πιο ισχυρές από τις απλές αναζητήσεις συστοιχιών ή κατακερματισμού. Ένας τέτοιος πίνακας δεν χρειάζεται απαραιτήτως να χρησιμοποιεί λέξεις στο πότε ρήτρες.
Εάν δεν υπάρχει αντιστοιχία όταν η ρήτρα και καμία άλλη ρήτρα, τότε η δήλωση της υπόθεσης θα αξιολογηθεί σε μηδέν.