DaDiRa Δημοσ. 6 Μαΐου 2014 Δημοσ. 6 Μαΐου 2014 Έχει δύο ημέρες που ξεκίνησα προγραμματισμό, συγκεκριμένα με την JavaScript και έχω την εξής απορία: Ποια πρέπει να είναι η στίξη μέσα σε ένα function block που έχει if και τι ακριβώς γίνεται με την μεταβλητή "speed"; Γράφω τον παρακάτω κώδικα (πείτε μου πως να τον διορθώσω): var SpeedLimit = function(speed) { var speed = prompt("What is your speed?"); if(speed < 80) { console.log("Keep driving safely."); } else { console.log("Slow down! Your speed is too high."); } }; Είναι σωστός έτσι, ή πρέπει να προσθέσω semicolo σε κάθε σειρά, δηλαδή, ακόμα και στις σειρές 3, 5 και 7;Επίσης, έχω θέσει το speed μέσα στο function και μετά σαν prompt. Γράφωντας function(speed) θα τρέξει το prompt και θα πάρει την τιμή που θα το δώσω, ή πρέπει να το θέσω πρώτα έξω από το fuction.
parsifal Δημοσ. 6 Μαΐου 2014 Δημοσ. 6 Μαΐου 2014 1. Δεν χρειάζονται πουθενά έξτρα semicolons, σε αυτό είσαι σωστός 2. Αφού ο χρήστης δίνει τιμή στη μεταβλητή speed μέσα στη συνάρτηση, δεν έχει νόημα να την περάσεις και σαν όρισμα της συνάρτησης. Χώρια που στη γραμμή 2 την ξαναδηλώνεις με το var keyword και νομίζω ότι θα πάρεις warning. Οπότε, ή έτσι: var SpeedLimit = function() { var speed = prompt("What is your speed?"); if(speed < 80) { console.log("Keep driving safely."); } else { console.log("Slow down! Your speed is too high."); } }; SpeedLimit(); ή γιουβέτσι: var SpeedLimit = function(speed) { if(speed < 80) { console.log("Keep driving safely."); } else { console.log("Slow down! Your speed is too high."); } }; var mySpeed = prompt("What is your speed?"); SpeedLimit(mySpeed);
migf1 Δημοσ. 6 Μαΐου 2014 Δημοσ. 6 Μαΐου 2014 ...ή και κοκορέτσι: var SpeedLimit = function() { var speed = prompt("What is your speed?"); if(speed < 80) { console.log("Keep driving safely."); } else { console.log("Slow down! Your speed is too high."); } return speed; };
DaDiRa Δημοσ. 6 Μαΐου 2014 Μέλος Δημοσ. 6 Μαΐου 2014 Το return δεν το έχω μάθει ακόμη, οπότε το αποκλείω σαν επιλογή. Το 2ο του parisfal το αποκλείω επίσης, γιατί θέλω να είναι όλο μαζί ένα function. Οπότε πάω με το πρώτο. Δεν ήξερα ότι μπορώ να αφήσω έτσι την παρένθεση, αλλά μπορώ να βάλω ότι θέλω μέσα;Στα πρώτα που έκανα (και ήταν απλά με console.log μέσα) έβαζα π.χ. speed και μέσα στο block το χρησιμοποιούσα κάπου ώστε όταν γράφω SpeedLimit(80) να αντικαθιστά όπου SpeedLimit(test) να τρέχει το prompt και να θέτεται έτσι το speed;
parsifal Δημοσ. 6 Μαΐου 2014 Δημοσ. 6 Μαΐου 2014 Όταν δηλώνεις μία συνάρτηση που δέχεται ορίσματα, π.χ. εδώ το speed: var SpeedLimit = function(speed) { ... // εδώ μπορώ να χρησιμοποιήσω το speed σε διάφορους υπολογισμούς, συγκρίσεις κλπ. }; αυτό γίνεται ώστε να έχεις τη δυνατότητα όταν καλείς τη συνάρτηση, να της «περνάς» τιμές έτοιμες και να δουλεύεις με αυτές απευθείας μέσα στο σώμα της συνάρτησης. Π.χ. όπως έγραψες κι εσύ: SpeedLimit(80); Αν δεν χρειάζεσαι κάτι τέτοιο (π.χ. θα ζητήσω από τον χρήστη να μου εισάγει speed ΜΕΣΑ στη συνάρτηση), η συνάρτησή σου δεν είναι απαραίτητο να δέχεται ορίσματα: var SpeedLimit = function() { var speed = prompt("..."); // αφού ρωτάω τον χρήστη εδώ, τί να το κάνω ως όρισμα; δεν έχει νόημα! .... }; Δεν ήξερα ότι μπορώ να αφήσω έτσι την παρένθεση, αλλά μπορώ να βάλω ότι θέλω μέσα;Ο,τι θέλεις; Σαν τί δηλαδή; 1
migf1 Δημοσ. 6 Μαΐου 2014 Δημοσ. 6 Μαΐου 2014 Σχετικο-άσχετο: Πώς γίνεται να έχετε μάθει συναρτήσεις και να μην έχετε μάθει το return; Δεν υπάρχει αυτό!
DaDiRa Δημοσ. 6 Μαΐου 2014 Μέλος Δημοσ. 6 Μαΐου 2014 Σχετικο-άσχετο: Πώς γίνεται να έχετε μάθει συναρτήσεις και να μην έχετε μάθει το return; Δεν υπάρχει αυτό! Μαθαίνω από το codecademy.com. Δεν ξέρω, να σου πω την αλήθεια, αλλά προς το παρών δεν έχει αναφερθεί σαν εντολή. Φαντάζομαι μόλις (ή μέχρι να) τελειώσω το κεφάλαιο με τα functions θα το μάθω. Edit: Για δες! Μόλις το επόμενο μάθημα http://prntscr.com/3gqe0u Ο,τι θέλεις; Σαν τί δηλαδή; Γενικά, αντί να το αφήσω κενό, μπορώ να βάλω οποιαδήποτε string ή κάποιον αριθμό; Επίσης, αν μπορείς θύμησε μου πως λέγονται τα ορίσματα (αυτό που βάζεις στην παρένθεση του fanction, δηλαδή) στα Αγγλικά (για να μπορώ να ταυτίζω αυτά που μου λες με αυτά που διαβάζω). Και για να μην ανοίγω καινούρια θέμα, ορίστε ακόμα μια ερώτηση μου. Έχω αυτόν τον κώδικα (είναι από τους πρώτους που γράφω τελείως μόνος μου, χωρίς καθοδήγηση - αυτός και ο προηγούμενος) var orangeCost = function(price) { var orangePrice = price * 5; console.log(orangePrice); }; orangeCost(5); σαν variable θέτω το orangePrice που στις οδηγίες δεν αναφέρει τίποτα γι' αυτό - δηλαδή το έβαλα μόνος μου. Μήπως πρέπει να βάλω κάτι άλλο; Μπορώ να βάλω orangeCost πάλι; (σε ένα μάθημα έλεγε πως γίνεται να ορίζεις μια μεταβλητή με την ίδια την μεταβλητή μέσα). Και τέλος, όταν το τρέχω, παίρνω στο console: 25 25 50 είναι φυσιολογικό αυτό ή έχω κάνει λάθος; Και γιατί συμβαίνει;
parsifal Δημοσ. 6 Μαΐου 2014 Δημοσ. 6 Μαΐου 2014 Με τη σειρά και λίγο ανάποδα: Επίσης, αν μπορείς θύμησε μου πως λέγονται τα ορίσματα (αυτό που βάζεις στην παρένθεση του fanctionΛέγονται "parameters". Γενικά, αντί να το αφήσω κενό, μπορώ να βάλω οποιαδήποτε string ή κάποιον αριθμό;Δεν βάζεις strings ή αριθμούς. Εκεί που δηλώνεις τη συνάρτηση, βάζεις προαιρετικά μία σειρά από ονόματα μεταβλητών χωρισμένα με κόμμα, οι οποίες θα πάρουν αντίστοιχη τιμή κατά την κλήση της συνάρτησης. Παράδειγμα: // Εδώ δηλώνω συνάρτηση που δέχεται δύο ορίσματα var ypologismosEmvadou = function(plevra1, plevra2) { return plevra1 * plevra2 }; // Εδώ την καλώ περνώντας τιμές στα ορίσματα, για να υπολογίσω το εμβαδό παραλληλογράμμου 2x5 var emvado = ypologismosEmvadou(2, 5); Και για να μην ανοίγω καινούρια θέμα, ορίστε ακόμα μια ερώτηση μου. Έχω αυτόν τον κώδικα (είναι από τους πρώτους που γράφω τελείως μόνος μου, χωρίς καθοδήγηση - αυτός και ο προηγούμενος) var orangeCost = function(price) { var orangePrice = price * 5; console.log(orangePrice); }; orangeCost(5); σαν variable θέτω το orangePrice που στις οδηγίες δεν αναφέρει τίποτα γι' αυτό - δηλαδή το έβαλα μόνος μου. Μήπως πρέπει να βάλω κάτι άλλο; Μπορώ να βάλω orangeCost πάλι; (σε ένα μάθημα έλεγε πως γίνεται να ορίζεις μια μεταβλητή με την ίδια την μεταβλητή μέσα).Και τέλος, όταν το τρέχω, παίρνω στο console: 25 25 50 είναι φυσιολογικό αυτό ή έχω κάνει λάθος; Και γιατί συμβαίνει; Η κονσόλα στο Codecademy κάνει λίγο τα δικά της νομίζω. Μήπως έχεις κι άλλον κώδικα, εκτός από αυτόν που δείχνεις;
DaDiRa Δημοσ. 6 Μαΐου 2014 Μέλος Δημοσ. 6 Μαΐου 2014 Δεν έχω κάτι άλλο εκτός από ένα comment στην αρχή. Να κατεβάσω καλύτερα και το πρόγραμμα για αν το τσεκάρω και από εκεί; Ένα link θα βοηθούσε, γιατί έχει μόνο λίγες μέρες που ασχολούμαι και δεν έχω ιδέα. Ο κώδικάς μου, δηλαδή, φαίνεται σωστός; Πάντως επειδή πολλά απ' όσα ρώτησα, απαντήθηκαν άμεσα σε επόμενα μαθήματα, θα μαζεύω και θα ρωτάω στο τέλος του κεφαλαίου, για να μην κάνω αυτό το spam κάθε τρεις και λίγο Αυτό με το εμβαδόν ήταν αμέσως μετά το return, οπότε το κατάλαβα, απλώς μπερδεύτηκα λίγο με τις αρχικές ασκήσεις που ήταν με strings. Στον κώδικά πιο πάνω που ρώτησα, άλλαξα το orangePrice με price (δηλαδή σαν την parameter) και το console έδειξε το ίδιο αποτέλεσμα. Η αλήθεια είναι ότι το χάνω λιγάκι με τόσες μεταβλητές και παραμέτρους, αλλά αν το δουλέψω θα το καταλάβω. Αυτό που δεν καταλαβαίνω είναι γιατί να χρησιμοποιώ το return όταν μπορώ να χρησιμοποιώ το console.log. Στον παρακάτω κώδικα, δεν βάζω console.log, γιατί δεν θέλω να εμφανιστεί πουθενά το number / 4 - λογικό. var quarter = function(number) { return number / 4; }; if (quarter(12) % 3 === 0 ) { console.log("The statement is true"); } else { console.log("The statement is false"); } Αλλά γιατί να χρησιμοποιώ το return στο τέλος ενός κώδικα, όπως αυτός που έγραψε ο migf1;
παπι Δημοσ. 6 Μαΐου 2014 Δημοσ. 6 Μαΐου 2014 στο #1 εχεις το speed = prompt('mpla mpla'); Αν το prompt πεταγε το αποτελεσμα στο console.log, πως θα επαιρνες το αποτελεσμα;
DaDiRa Δημοσ. 6 Μαΐου 2014 Μέλος Δημοσ. 6 Μαΐου 2014 Εγώ δεν θέλω τίποτα από τα δύο. Στο console εμφανίζεται ένα από τα μηνύματα στο if/else και δεν υπάρχει κάτι που θέλω να κάνω μετά με το speed, οπότε ποιος ο λόγος να υπάρχει εκεί; Θα μου φαινόταν λογικά αν το χρησιμοποιούσα για μια πράξη, π.χ. αν ήθελα να του πω να μειώσει στο μισό return speed - speed / 2.
migf1 Δημοσ. 6 Μαΐου 2014 Δημοσ. 6 Μαΐου 2014 Εγώ δεν θέλω τίποτα από τα δύο. Στο console εμφανίζεται ένα από τα μηνύματα στο if/else και δεν υπάρχει κάτι που θέλω να κάνω μετά με το speed, οπότε ποιος ο λόγος να υπάρχει εκεί; Θα μου φαινόταν λογικά αν το χρησιμοποιούσα για μια πράξη, π.χ. αν ήθελα να του πω να μειώσει στο μισό return speed - speed / 2. Επειδή υπάρχουν διάφορες επιλογές, εμένα τουλάχιστον δεν μου ήταν εξαρχής σαφές τι ακριβώς ρώτησες. Κατάλαβα πως ήθελες να σου επιστρέφει η συνάρτηση την τιμή της speed που σου δίνει ο χρήστης μέσα στη συνάρτηση. Θεώρησα δηλαδή πως καλώς πέρναγες το speed ως όρισμα στη συνάρτηση αλλά ότι κακώς το όριζες ξανά μέσα της ως τοπική μεταβλητή. ΥΓ. Το "όρισμα" που ρώτησες, στα Αγγλικά θα το συναντήσεις ως "argument". Βασικά υπάρχει μια τεχνική διαφορά μεταξύ ορισμάτων (arguments) και παραμέτρων (parameters) που έχει να κάνει με τον αν μιλάμε για τον ορισμό της συνάρτησης ή για την κλήση της, αλλά είναι ψιλά γράμματα... οπότε θα το συναντήσεις είτε ως parameter είτε ως argument.
DaDiRa Δημοσ. 7 Μαΐου 2014 Μέλος Δημοσ. 7 Μαΐου 2014 Μίλησα σήμερα με κάποιον και μου ξεκαθάρισε πως το return είναι καθαρά για μέσα σε μια συνάρτηση, και όχι για έξω από αυτήν, οπότε κατάλαβα πως και για τί ακριβώς χρησιμοποιείται. Χθες έφτιαξα και ένα rock-paper-scissors (γύρω στις 40 γραμμές) μόνος μου, οπότε είμαι σίγουρος ότι πλέον καταλαβαίνω τη χρήση όλων των εντολών που έμαθα μέχρι τώρα. Από εδώ και πέρα, έχει loops.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα