Προς το περιεχόμενο

Simple javascript question


Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Καλησπέρα σε όλους! Μιας και είμαι νέος στη Javascript θα ήθελα κάποιος να μου αποσαφηνίσει το εξής: στην calcTips function χρειάζεται παράμετρος? Όχι? Ή δεν έχει σημασία...γενικά δεν έχω πολυκαταλάβει σε ποιες περιπτώσεις μπαίνει παράμετρος στις functions και σε ποιες όχι(πχ το συγκεκριμένο παράδειγμα δουλεύει είτε βάλω, είτε όχι). Btw στο ακόλουθο παράδειγμα κώδικα γίνεται ένας απλός υπολογισμός των tips που αφήνει κάποιος σ ένα εστιατόριο και της συνολικής τιμής που πληρώνει(συμπεριλαμβανομένων των tips).

var john = {
    fullName: 'John Smith',
    bills: [124, 48, 268, 180, 42],
    calcTips: function(bill) {
         this.tips = [];
         this.finalValues = [];
        
        for (var i=0; i<this.bills.length; i++) {
            var tip;
            var bill = this.bills[i]; 
        if(bill<50) {
            tip = bill * 20/100;
        } else if (bill>=50 && bill<200) {
	       tip = bill * 15/100;
} else {
	 tip = bill *10/100;
}
//Array which contains all the tips 
//Array which contains the final payment
    this.tips[i] = tip;
    this.finalValues[i] = tip + bill;

}
    }
}

john.calcTips();
console.log(john);

 

Επεξ/σία από AndreasV.
Δημοσ. (επεξεργασμένο)

djacat, k33theod ευχαριστώ! Στην ουσία η παράμετρος έχει νόημα όταν καλείς τη function με συγκεκριμένη τιμή..κάπως έτσι το κατάλαβα.

Επεξ/σία από AndreasV.
Δημοσ. (επεξεργασμένο)

Είναι λίγο ιστορία με τις παραμέτρους στις συναρτήσεις. 

Σαν ιδέα είναι όπως περίπου τα μαθηματικά f(x)=3*x+5

Το 1ο και βασικό είναι ότι βάζουμε ως παραμέτρους πληροφορίες που χρειάζονται για να εκτελεστεί η συνάρτηση και τις χρησιμοπούμε μέσα στή συνάρτηση, κάτι που εσύ στο παράδειγμά σου δεν κάνεις😁 ή νομίζεις οτι κάνεις. πχ Θέλω μια συνάρτηση που να υπολογίζει το εμβαδό τριγώνου οι πληροφορίες που χρειάζομαι είναι basi και ipsos.

function emb_trigonou(basi, ipsos) {
        return basi*ipsos/2}

Στα αντικείμενα όπως έχεις εσύ λειτουργεί κάπως διαφορετικά (πιο απλά), εφόσον το basi και ipsos είναι properties είναι ορατά από όλες τις μεθόδους και αυτό που πρέπει να κάνεις είναι

emb_trigonou: function() {
        return this.basi*this.ipsos/2}

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

Επεξ/σία από k33theod
  • Thanks 1
Δημοσ.

Σαν να λεμε οτι σε περιπτωση που εχω function μεσα σε αντικειμενο(δηλαδη method) δε χρειαζεται να βαλω παραμετρους. Αν ομως η function δεν ειναι μεσα σε αντικειμενο τοτε πρεπει. Σωστα?

Δημοσ.

Όχι, δεν είναι τόσο απλοϊκό.

Επίσης εδώ εμπλέκεται και ο περίεργος τρόπος με τον οποίο λειτουργεί το this στην JS, που είναι διαφορετικός από βασικά οποιαδήποτε άλλη γλώσσα.

Για παράδειγμα, αν κάνεις

var calcTips = john.calcTips
calcTips()

τότε παρόλο που η συνάρτηση θα κληθεί κανονικά, δεν θα δουλέψει γιατί το this δε θα είναι το αντικείμενο που περιμένεις (ενώ αν το έπαιρνε σαν παράμετρο δε θα είχες αυτό το πρόβλημα).

Δεν υπάρχει μια εύκολη και καθολική απάντηση στην ερώτηση σου. Η συνάρτηση χρειάζεται κάποια δεδομένα για να λειτουργήσει πάνω σε αυτά. Το αν θα τα πάρει μέσω this ή μέσω παραμέτρων ή αναφερόμενη σε κάποια μεταβλητή που είναι in scope στο σημείο ορισμού της συνάρτησης είναι μια επιλογή που κάνουμε λαμβάνοντας διάφορα πράγματα υπόψη.

  • Like 1
Δημοσ.

Η αλήθεια είναι πως περίμενα να είναι κάτι απλούστερο εξού και ο τίτλος 'simple'. Τελικά δε μπορώ να πω ότι κατάλαβα ακριβώς τι παίζει με τις παραμέτρους αν και τα παραδείγματα που μου δώσατε όλοι ήταν λίγο πιο διαφωτιστικά. Φαντάζομαι μέσω εξάσκησης θα το καταλάβω πλήρως...δοκιμάζοντας και τρέχοντας διάφορες συναρτήσεις. Εσείς π.χ ως πιο έμπειροι καταλαβαίνετε αμέσως αν πρέπει να βάλετε παράμετρο σε μια συνάρτηση ή και πάλι δοκιμάζοντας πάτε?

Thanks!

Δημοσ.

Θα έλεγα ότι δεν είναι ιδιαίτερα δύσκολο να καταλάβεις πότε μια συνάρτηση χρειάζεται παράμετρο. Ο γενικός κανόνας αυτός που σου είπα. Μετά κοιτάς και άλλα πράγματα.

Πχ.  Τις παραμέτρους η συνάρτησή σου κάπου πρέπει να τις βρεί, δεν θα τις πληκτολογήσεις (στις περισσότερες των περιπτώσεων), εδώ έρχεται η ένοια του scope.

       Έχω object και μπορώ να πάω με this;

     Θέλω να η συνάρτηση να αλλάζει την παράμετρο, εδώ έρχεται η ένοια του by value, by reference

   Τι είναι πιο οικονομικό, τι είναι πιο γρήγορο αυτά τα δύο δεν πάνε πάντα μαζί.

Λαμβάνεις υπόψη ιδιαιτέροτητες της γλώσσας άλλο javascript άλλο java άλλο c. και άλλα θα έλεγα αλλά όλα αυτά μόνο θα σε μπερδέψουν.

Φαντάζομαι δεν έχεις εμπειρία από άλλες γλώσσες ή έχεις;

 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...