if...else, switch case, ? :

Λύσεις προβλημάτων για το δημοφιλές πρόγραμμα κατασκευής παρουσιάσεων στο διαδίκτυο.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
spookyb52
Δημοσιεύσεις: 1891
Εγγραφή: 23 Ιαν 2002 01:00
Τοποθεσία: Lost in the mansion
Επικοινωνία:

if...else, switch case, ? :

Δημοσίευση από spookyb52 » 27 Οκτ 2006 17:43

Πώς μπορούμε να ελέγχουμε άν ισχύουν διάφορες συνθήκες μέσα στον κώδικα; Πώς θα λέγαμε σε κώδικα άν είναι το φρένο πατημένο μείωσε την ταχύτητα; Σίγουρα θα έχετε ακούσει για την if else σύνταξη ακόμα και άν δέν γνωρίζεται την σύνταξή της

if(condition){
statement
}
Η παραπάνω σύνταξη της if είναι η απλούστερη. Χρειαζόμαστε ένα condition που θα ελέγχουμε άν ισχύει και ένα statement που θα εκτελείται άν ισχύει η αρχική συνθήκη


Παραδείγματα

Κώδικας: Επιλογή όλων

if (a == 14) {
	trace(1);
}
Άν η μεταβλητή a είναι ίση με 14 εμφάνισε στο Output παράθυρο τον αριθμό 1

Κώδικας: Επιλογή όλων

if (a != 0) {
	trace(1);
}
Άν η μεταβλητή a δέν είναι ίση με μηδέν εμφάνισε στο Output παράθυρο τον αριθμό 1

Κώδικας: Επιλογή όλων

if (a > 0) {
	trace(1);
}
Άν η μεταβλητή a είναι μεγαλύτερη από μηδέν εμφάνισε στο Output παράθυρο τον αριθμό 1

Κώδικας: Επιλογή όλων

if &#40;a < 0&#41; &#123;
	trace&#40;1&#41;;
&#125;
Άν η μεταβλητή a είναι μικρότερη από μηδέν εμφάνισε στο Output παράθυρο τον αριθμό 1

Κώδικας: Επιλογή όλων

if &#40;a <= 0&#41; &#123;
	trace&#40;1&#41;;
&#125;
Άν η μεταβλητή a είναι μικρότερη - ίση με μηδέν εμφάνισε στο Output παράθυρο τον αριθμό 1

Κώδικας: Επιλογή όλων

if &#40;a >= 0&#41; &#123;
	trace&#40;1&#41;;
&#125;
Άν η μεταβλητή a είναι μεγαλύτερη - ίση με μηδέν εμφάνισε στο Output παράθυρο τον αριθμό 1

Κώδικας: Επιλογή όλων

if &#40;a == undefined&#41; &#123;
	trace&#40;1&#41;;
&#125;
Άν η μεταβλητή a είναι undefined εμφάνισε στο Output παράθυρο τον αριθμό 1. Η μεταβλητή a είναι undefined γιατί δέν έχει οριστεί σε κανένα σημείο

Κώδικας: Επιλογή όλων

if &#40;a == true&#41; &#123;
	trace&#40;1&#41;;
&#125;
Άν η μεταβλητή a είναι true εμφάνισε στο Output παράθυρο τον αριθμό 1

Κώδικας: Επιλογή όλων

if &#40;a == false&#41; &#123;
	trace&#40;1&#41;;
&#125;
Άν η μεταβλητή a είναι false εμφάνισε στο Output παράθυρο τον αριθμό 1


Ένα συχνό λάθος στην αρχή είναι όταν ερωτούμε για ισότητα. Το if(a=0) δέν ελέγχει άν το a είναι ίσο με μηδέν αλλά θέτει την τιμή 0 στην μεταβλητή a. Το σωστό είναι if(a==0)

To flash θεωρεί ότι η αριθμητική τιμή για κάθε false μεταβλητή είναι 0 και για κάθε true 1. Μπορούμε να γράψουμε αντί για if(a==true) --> if(a==1) και αντί για if(a==false) ---> if(a==0)
Εναλλακτικά μπορούμε να χρησιμοποιήσουμε operators για το ίδιο πράγμα

παράδειγμα

Κώδικας: Επιλογή όλων

if &#40;a == true&#41; &#123;
	trace&#40;1&#41;;
&#125;

Κώδικας: Επιλογή όλων

if &#40;a&#41; &#123;
	trace&#40;1&#41;;
&#125;
Τα δύο παραπάνω είναι ισοδύναμα. Όπως και τα παρακάτω

Κώδικας: Επιλογή όλων

if &#40;a == false&#41; &#123;
	trace&#40;1&#41;;
&#125;

Κώδικας: Επιλογή όλων

if &#40;!a&#41; &#123;
	trace&#40;1&#41;;
&#125;

Ένα condition μπορεί να αποτελείται από περισσότερα, του ενός, μέρη

Κώδικας: Επιλογή όλων

if &#40;a == 1 && b == 2&#41; &#123;
	trace&#40;1&#41;;
&#125;
Άν η μεταβλητή a είναι ίση με 1 και η μεταβλητή b ίση με 2 εμφάνισε στο Output παράθυρο τον αριθμό 1

Κώδικας: Επιλογή όλων

if &#40;a == 1 || b == 2&#41; &#123;
	trace&#40;1&#41;;
&#125;

Άν η μεταβλητή a είναι ίση με 1, η, η μεταβλητή b ίση με 2 εμφάνισε στο Output παράθυρο τον αριθμό 1

Κώδικας: Επιλογή όλων

if &#40;a != 1 && b > 2&#41; &#123;
	trace&#40;1&#41;;
&#125;

Άν η μεταβλητή a δέν είναι ίση με 1 και η μεταβλητή b είναι μεγαλύτερη από 2 εμφάνισε στο Output παράθυρο τον αριθμό 1

Κώδικας: Επιλογή όλων

if &#40;a == 1 && b>2 && c<4&#41; &#123;
	trace&#40;1&#41;;
&#125;
Άν η μεταβλητή a είναι ίση με 1 και η μεταβλητή b είναι μεγαλύτερη από 2 και η μεταβλητή c μικρότερη από 4 εμφάνισε στο Output παράθυρο τον αριθμό 1

Κώδικας: Επιλογή όλων

if &#40;a == 1 && !b&#41; &#123;
	trace&#40;1&#41;;
&#125;
Άν η μεταβλητή a είναι ίση με 1 και η μεταβλητή b είναι false εμφάνισε στο Output παράθυρο τον αριθμό 1

Κώδικας: Επιλογή όλων

if &#40;a%3 == 0 && a-b == 1&#41; &#123;
	trace&#40;1&#41;;
&#125;
Άν το υπόλοιπο της διαίρεσης του a με το3 (a/3) είναι ίσο με μηδέν και άν το αποτέλεσμα της αφαίρεσης του β από το α είναι ίσο με 1 τότε εμφάνισε στο Output παράθυρο τον αριθμό 1

Κώδικας: Επιλογή όλων

if &#40;&#40;a == 1 || b == 2&#41; && c&#41; &#123;
	trace&#40;1&#41;;
&#125;
Στο παραπάνω codition θέλουμε να ισχύουν 2 συνθήκες

θέλουμε να ισχύει το πρώτο μέρος: (a == 1 || b == 2)

και το δεύτερο: c

Για να ισχύει το πρώτο θα πρέπει η τιμή της μεταβλητής a να είναι ίση με 1, ή, η τιμή της μεταβλητής b να είναι ίση με 2
Για να ισχύει το δεύτερο θα πρέπει η τιμή της μεταβλητής c να είναι true'

Γενικά χρησιμοποιούμε παρενθέσεις όταν θέλουμε να ελέγχουμε πολλές παράμετρους για να ισχύει ένα condition και έχουμε περισσότερα από ένα conditions

Για παράδειγμα θα γράφαμε

Κώδικας: Επιλογή όλων

if &#40;a == 1 || b == 2&#41; &#123;
	trace&#40;1&#41;;
&#125;
Το παρακάτω με παρένθεση θα γραφόταν ώς

Κώδικας: Επιλογή όλων

if &#40;&#40;a == 1 || b == 2&#41; && c==3&#41; &#123;
	trace&#40;1&#41;;
&#125;
η παρένθεση εδώ δέν είναι απαραίτητη αλλά άν την βάζαμε σε λάθος σημείο θα άλλαζε το νόημα

πχ

Κώδικας: Επιλογή όλων

if &#40;a == 1 || &#40;b == 2 && c==3&#41;&#41; &#123;
	trace&#40;1&#41;;
&#125;

Το παραπάνω για να ισχύει θα πρέπει το a να είναι ίσο με 1, ή, το b να είναι ίσο με 2 και ταυτόχρονα η μεταβλητή c ίση με 3

if(condition){
statement
} else{
statement
}
Άν ισχύει μια συνθήκη εκτέλεσε τις ενέργεις μέσα στην αγκύλη διαφορετίκα ακολούθησε τις ενέργεις που υπάρχουν στην επόμενη αγκύλη

πχ

Κώδικας: Επιλογή όλων

if &#40;a == 1&#41; &#123;
	trace&#40;1&#41;;
&#125; else &#123;
	trace&#40;2&#41;;
&#125;

Άν η μεταβλητή a είναι ίση με 1 εμφάνισε στο Output παράθυρο τον αριθμό 1 διαφορετικά εμφάνισε στο Output παράθυρο τον αριθμό 2
if(condition){
statement
}else if(condition){
statement
}else{
statement
}

Παράδειγμα

Κώδικας: Επιλογή όλων

if &#40;a == 1&#41; &#123;
	trace&#40;1&#41;;
&#125; else if &#40;b != 2&#41; &#123;
	trace&#40;2&#41;;
&#125; else &#123;
	trace&#40;3&#41;;
&#125;
Άν η μεταβλητή a είναι ίση με 1 εμφάνισε στο Output παράθυρο τον αριθμό 1 διαφορετικά (άν η μεταβλητή a δέν είναι ίση με 1) άν η μεταβλητή b δέν είναι ίση με 2 εμφάνισε στο Output παράθυρο τον αριθμό 2
Άν δέν ισχύει τίποτα από τα παραπάνω εμφάνισε στο output παράθυρο τον αριθμό 3

Θα μπορούσαμε να έχουμε και περισσότερες else if η να παραλείψουμε την else άν δέν την χρειαζόμαστε.


πχ

Κώδικας: Επιλογή όλων

if &#40;a == 1&#41; &#123;
	trace&#40;1&#41;;
&#125; else if &#40;b != 2&#41; &#123;
	trace&#40;2&#41;;
&#125; else if &#40;c == 2&#41; &#123;
	trace&#40;3&#41;;
&#125;

?: (conditional)

Μια if else εντολή μπορεί να γραφτεί και με εναλλακτική μορφή

πχ έχουμε μια απλά if else όπως η παρακάτω

Κώδικας: Επιλογή όλων

if &#40;a == 1&#41; &#123;
	trace&#40;1&#41;;
&#125; else &#123;
	trace&#40;2&#41;;
&#125;
Αυτό θα μπορούσε να γραφτεί και ώς

Κώδικας: Επιλογή όλων

&#40;a == 1&#41; ? trace&#40;1&#41; &#58; trace&#40;2&#41;;

Άς δούμε άλλο ένα παράδειγμα

Κώδικας: Επιλογή όλων

if &#40;a == 1&#41; &#123;
	b = 2;
&#125; else &#123;
	b = 1;
&#125;

Άν το a=1 δώσε στο b την τιμή 2 διαφορετικά δώσε σε αυτό την τιμή 1

Αυτό θα μπορούσαμε να το γράψουμε και ώς

Κώδικας: Επιλογή όλων

&#40;a == 1&#41; ? b=2 &#58; b=1;

εναλλακτικά το ίδιο θα μπορούσαμε να το γράψουμε και ώς

Κώδικας: Επιλογή όλων

b = &#40;a == 1&#41; ? 2 &#58; 1;

switch (condition){
case x:
break;
default :
}


Η switch case είναι ένας ακόμα τρόπος για να γράψουμε μια if else εντολή. Σε αυτή την περίπτωση άν το condition είναι ίσο με το x τότε εκτελούνται οι ενέργειες ποθ υπάρχουνε μετά την άν και κάτω τελεία
Άν κανένα από τα cases δέν ισχύει εκτελούνται οι default ενέργειες (άν δέν έχουμε παραλέιψει να θέσουμε deafault ενέργειες)


Ένα απλό παράδειγμα είναι και το επόμενο

Κώδικας: Επιλογή όλων

switch &#40;myvar&#41; &#123;
case true &#58;
	a = 1;
&#125;

Άν η μεταβλητή myvar είναι true τότε η μεταβλητή a θα πάρει την τιμή 1. Αυτό θα το γράφαμε με την if else ώς

Κώδικας: Επιλογή όλων

if &#40;myvar == true&#41; &#123;
	a = 1;
&#125;
η όπως είπαμε θα μπορούσαμε να το γράψουμε και ώς

Κώδικας: Επιλογή όλων

if &#40;myvar&#41; &#123;
	a = 1;
&#125;
Θα τροποποιήσουμε λίγο την αεχική switch case με την τοποθέτηση και μιας default statement

Κώδικας: Επιλογή όλων

switch &#40;myvar&#41; &#123;
case true &#58;
	a = 1;
	break;
default &#58;
	a = 2;
&#125;


Σε αυτή την περίπτωση άν η μεταβλητή myvar είναι true θα πάρει την τιμή 1 διαφορετικά θα πάρει την τιμή 2. ουσιαστικά πρόκειτε για μια if else εντολή
Θα μπορούσαμε να έχουμε έλεγχο για περισσότερες συνθήκες όπως κάναμε και με την else if

πχ

Κώδικας: Επιλογή όλων

switch &#40;myvar&#41; &#123;
case true &#58;
	a = 1;
	break;
case false &#58;
	a = 2;
	break;
case 12 &#58;
	a = 3;
	break;
default &#58;
	a = 0;
&#125;
στην παραπάνω περίπτωση ελέγχουμε άν η μεταβλητή myvar είναι true, false, η ίση με 12 και δίνουμε αντίστοιχα για κάθε περίπτωση στο a την τιμή 1, 2, 3. Άν δέν ισχύει καμία από τις cases που έχουμε το a παίρνει την τιμή 0.

Δέν έχει σημασία ποια σύνταξη θα χρησιμοποιήσετε στον κώδικα.

Όπως ίσως παρατηρήσατε κάτω από κάθε statement συμπλήρώνουμε την break. Η break παραλέιπει τον έλεγχο από τις υπόλοιπες cases μόλις βρεί το πρώτο ταίριαγμα.
Δέν είναι υποχρεωτικό να βάλετε κάτω από κάθε statement την break, εξαρτάται από τι θέλετε να κανετε.

πχ

Κώδικας: Επιλογή όλων

myvar = true;
switch &#40;myvar&#41; &#123;
case true &#58;
	myvar = false;
	break;
case false &#58;
	a = 2;
	
&#125;


Στο παραπάνω τμήμα κώδικα υποθέσαμε αρχικά ότι η τιμή της myvar είναι true και αρχίσαμε τον έλεγχο με την switch

Το πρώτο case είναι η myvar να είναι true πράγμα που ισχύει. Απο την στιγμή που ισχύει θέσαμε ώς statement η myvar να πάρει την τιμή false.
Το επόμενο case είναι η myvar να είναι false. Και το επόμενο case είναι σωστό γιατί αλλαξαμε την τιμή σε false λίγο πρίν όπως είδαμε. Σε αυτή την περίπτωση η μεταβλητή a θα πάρει την τιμή 2
Το πρόβλημα είναι όμως ότι στο πρώτο case έχουμε βάλει την break. Από την στιγμή που το πρώτο case είναι σωστό και έχουμε βάλει break δέν θα γίνει ποτέ έλεγχος για το επόμενο case.
Το θέμα είναι λοπόν τί θέλουμε να κάνουμε. Άν θέλουμε ο έλεγχος να συνεχιστεί και στα υπόλοιπα cases παραλείπουμε την break μετά από καθε statement διαφορετικά βάζουμε την break στο statement που θα επιθυμούσαμε να σταματήσει ο έλεγχος όταν μια case είναι αλήθής.





Τα παραπάνω παραδειγματα είναι απλά. Πολλές φορές ο έλεγχος δέν θα είναι τόσο απλός ώστε να ελέγχει άν μια μεταβλητή είναι true, false κτλ αλλά όσο πολύπλοκος και να είναι ό έλεγχος βασίζεται πάντα στις απλές αυτές αρχές

Μια if εντολή μπορεί να χρησιμοποιηθεί σε συνδυασμό με μια for και να μας γλιτώσει από αρκετό γράψιμο

πχ ένα απλό παράδειγμα είναι και το παρακάτω

Κώδικας: Επιλογή όλων

for &#40;var i = 0; i<8; ++i&#41; &#123;
	if &#40;a=i&#41; &#123;
		b = a;
	&#125;
&#125;

Αυτό θα το γράφαμε χωρίς την χρήση της for λούπας ώς

Κώδικας: Επιλογή όλων

if &#40;a=1&#41; &#123;
	b = a;
&#125; else if &#40;a=2&#41; &#123;
	b = a;
&#125; else if &#40;a=3&#41; &#123;
	b = a;
&#125; else if &#40;a=4&#41; &#123;
	b = a;
&#125; else if &#40;a=5&#41; &#123;
	b = a;
&#125; else if &#40;a=6&#41; &#123;
	b = a;
&#125; else if &#40;a=7&#41; &#123;
	b = a;
&#125;
Επίσης ο έλεγχος σε ένα condition μπορεί να είναι πολυπλοκότερος. πχ

Κώδικας: Επιλογή όλων

if &#40;mytext.substr&#40;2, 4&#41; == as&#91;numb&#93;&#41; &#123;
	myNewWord = mytext.substr&#40;word.indexOf&#40;"s", 2&#41;, ++b&#41;;
&#125;
αλλά όσο πολύπλοκος είναι βασίζεται στην αρχική απλή φόρμα. Δηλαδή το παραπάνω είναι της μορφής
if (a == x) {
myNewWord = a_value
}

Στο παρακάτω τμήμα κώδικα πχ χρησιμοποιούμε μια for loop μέσα στην οποιά έχουμε μια if εντολή. Η if εντολή ελέγχει άν είναι πατημένο κάποιο πλήκτρο με βάση ένα πίνακα.
Μέσα στην if έχουμε βάλει και μια switch case η οποιά ελέγχει με την σειρά της για ανίχνευση σύγκρουσης 2 αντικειμένων (maze και character) Και ανάλογα με το πλήκτρο που πατήθηκε ενέργεί ανάλογα (υπάρχει μια αντιστοίχηση ανάμεσα σε 2 πίνακες που δέν φαίνεται σε αυτό το τμήμα του κώδικα)
Αυτό φυσικά είναι περίσσότερο πολύπλοκο και βασίζεται σε περισσότερα πράγματα από απλή γνώση σύνταξης μια if εντολής αλλά η βάση για να γράψεται κάποια στιγμή τέτοια τμήματα κώδικα είναι να μάθετε τις βασικές αρχές όπως περιέγραψα παραπάνω και να εξασκηθείτε στην χρήση τους.

Κώδικας: Επιλογή όλων

for &#40;var i = 0; i<5; ++i&#41; &#123; 
      if &#40;Key.isDown&#40;keyboard&#91;i&#93;&#41;&#41; &#123; 
         with &#40;character&#41; &#123; 
            switch &#40;true&#41; &#123; 
            case _root.maze.hitTest&#40;getBounds&#40;_root&#41;.xMax, _y, true&#41; &#58; 
               _x -= speed, _y += speedkey&#91;i&#93;&#91;1&#93;; 
               break; 
            case _root.maze.hitTest&#40;getBounds&#40;_root&#41;.xMin, _y, true&#41; &#58; 
               _x += speed, _y += speedkey&#91;i&#93;&#91;1&#93;; 
               break; 
            case _root.maze.hitTest&#40;_x, getBounds&#40;_root&#41;.yMax, true&#41; &#58; 
               _y -= speed, _x += speedkey&#91;i&#93;&#91;0&#93;; 
               break; 
            case _root.maze.hitTest&#40;_x, getBounds&#40;_root&#41;.yMin, true&#41; &#58; 
               _y += speed, _x += speedkey&#91;i&#93;&#91;0&#93;; 
               break; 
            default &#58; 
               _x += speedkey&#91;i&#93;&#91;0&#93;, _y += speedkey&#91;i&#93;&#91;1&#93;; 
            &#125; 
         &#125; 
      &#125; 
   &#125;
Τελευταία επεξεργασία από το μέλος spookyb52 την 28 Οκτ 2006 14:18, έχει επεξεργασθεί 1 φορά συνολικά.
Life is like a fast car on an icy road. Brakes don't work, yes I know it, but I step on the gas
Garage punk | Rockabilly | Rock 'n' Roll | Stoner

id12586
στις καρδιές μας
Δημοσιεύσεις: 8387
Εγγραφή: 23 Ιουν 2003 23:28
Τοποθεσία: Far away
Επικοινωνία:

if...else, switch case, ? :

Δημοσίευση από id12586 » 28 Οκτ 2006 14:16

Εύγε spooky! :clap: Απλό και κατανοητό βοήθημα και για τους "πρωτάρηδες"

Tutorialised :wink:
Chris at your Services
ΕικόναSacame de Aqui

spookyb52
Δημοσιεύσεις: 1891
Εγγραφή: 23 Ιαν 2002 01:00
Τοποθεσία: Lost in the mansion
Επικοινωνία:

if...else, switch case, ? :

Δημοσίευση από spookyb52 » 28 Οκτ 2006 14:19

thnx :)
Life is like a fast car on an icy road. Brakes don't work, yes I know it, but I step on the gas
Garage punk | Rockabilly | Rock 'n' Roll | Stoner

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27626
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

if...else, switch case, ? :

Δημοσίευση από cordis » 28 Οκτ 2006 21:58

με αυτό μαθαίνεις και προγραμματισμό όχι μόνο action script! ;)
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

id12586
στις καρδιές μας
Δημοσιεύσεις: 8387
Εγγραφή: 23 Ιουν 2003 23:28
Τοποθεσία: Far away
Επικοινωνία:

if...else, switch case, ? :

Δημοσίευση από id12586 » 29 Οκτ 2006 00:01

Εκει πήγαινε το "πρωτάρηδες" :)

Αυτό το βοήθημα είναι ουσιαστικά ολη η "θεωρία" της if
Chris at your Services
ΕικόναSacame de Aqui

Απάντηση

Επιστροφή στο “Flash γενικά”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης