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

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

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

Καλησπέρα. Μια μικρή διευκρίνηση γιατί κάτι δεν έχω καταλάβει καλά. Αναφέρομαι σε function php αν και αυτό που ρωτάω μάλλον πάει σε όλες τις γνωστές γλώσσες...

Αν έχω μία function με 4 παράμετρους για παράδειγμα και οι 3 παράμετροι είναι προαιρετικές. Αν σε ένα σημείο θέλω να καλέσω την function με 2 παραμέτρους, πως καθορίζω ποια παράμετρο έχω εισάγει?

Παράδειγμα. Έστω οτι θέλω να φτιάξω μία function που να αποθηκευει διαστάσεις ενός επίπλου στην βάση. Θέλω σαν παραμέτρους να δίνω όνομα και αν δεν δώσω τιμή σε κάποια διάσταση, η τιμή να είναι 1.

Οπότε:

function epiplo(onoma, platos = 1, mikos = 1, ipsos = 1){

mpla mpla mpla mpla

}

Αν εγώ θέλω να καλέσω την συνάρτηση, βάζοντας μόνο το όνομα και το ipsos, έτσι έχουμε:

epiplo("Trapezi", 1.5), πως θα καταλάβει η συνάρτηση οτί το 1,5 αναφέρεται στο ύψος και όχι στο πλάτος ή το μήκος?

 

Επεξ/σία από iphotographer
Δημοσ.

Καλησπέρα

Τις μεταβλητές στην function, τις περνάς με τη σειρά και να χωρίζουν με , μπορεί ας πούμε στην δική σου να βάλεις,

epiplo('ena', ,1.5);

Το πλάτος είναι κενό άρα 1 σε αυτή τη περίπτωση

Δημοσ.
56 λεπτά πριν, iphotographer είπε

Καλησπέρα. Μια μικρή διευκρίνηση γιατί κάτι δεν έχω καταλάβει καλά. Αναφέρομαι σε function php αν και αυτό που ρωτάω μάλλον πάει σε όλες τις γνωστές γλώσσες...

Αν έχω μία function με 4 παράμετρους για παράδειγμα και οι 3 παράμετροι είναι προαιρετικές. Αν σε ένα σημείο θέλω να καλέσω την function με 2 παραμέτρους, πως καθορίζω ποια παράμετρο έχω εισάγει?

Παράδειγμα. Έστω οτι θέλω να φτιάξω μία function που να αποθηκευει διαστάσεις ενός επίπλου στην βάση. Θέλω σαν παραμέτρους να δίνω όνομα και αν δεν δώσω τιμή σε κάποια διάσταση, η τιμή να είναι 1.

Οπότε:


function epiplo(onoma, platos = 1, mikos = 1, ipsos = 1){

mpla mpla mpla mpla

}

Αν εγώ θέλω να καλέσω την συνάρτηση, βάζοντας μόνο το όνομα και το ipsos, έτσι έχουμε:

epiplo("Trapezi", 1.5), πως θα καταλάβει η συνάρτηση οτί το 1,5 αναφέρεται στο ύψος και όχι στο πλάτος ή το μήκος?

 

Αυτό που ζητάς γίνεται στην Python, σχεδόν όπως πας να το σκεφτείς. 

Για παράδειγμα, σε Python μπορείς να έχεις:

def foo(onoma, platos=1, mikos=1, ipsos=1):
  ...
  
  

και μετά μπορείς κάνεις: 

x1 = foo('test', ipsos=3)
x2 = foo('test2', platos=2)
x3 = foo('test2', mikos=4, platos=10)

 

Δημοσ. (επεξεργασμένο)
16 minutes ago, parsifal said:

Parameter skipping δεν υποστηρίζεται στην PHP. Εξήγηση και πιθανά workarounds:

https://stackoverflow.com/questions/1066625/how-would-i-skip-optional-arguments-in-a-function-call

Όντως.

Αλλά μπορείς να περνάς ένα array σαν μοναδική παράμετρο και μέσα στη function να κάνεις τις πράξεις

Επεξ/σία από Επισκέπτης
Δημοσ.
function epiplo(onoma, platos = null, mikos = null, ipsos = null)

Check poia den einai null, gia ta ypoloipa vazeis tis default times pou tis kratas allou. 

Panta otan tin kaleis tha dineis times gia ola (null gia osa thes na paroun default times) p.χ. epipla('karekla',null,null,3)

Or

function epiplo(onoma, array diastaseis)

opote tha pernas san deutero orisma ena array px distaseis = [mikos=>null, platos=>null, ispos=>3]
Δημοσ.

Καλημέρα.

Αν και δεν γνωρίζω για ποιό λόγο χρειάζεστε αυτές τις παραμέτρους όλες μαζι στην συνάρτηση θα μπορούσα να σας πρωτείνω τα παρακάτω :

1) Θεωρώ πως δεν πρέπει να έχετε πολλές παραμέτρους στιε συναρτήσεις αν δεν είνα πολυ αναγκαίο και πάλι δεν πρέπει. Σε αυτή την περίπτωση δημιουργείται ένα instance μιας κλάσης και στέλνεται σαν παράμετρο το instance με τα δεδομένα. Στην περίπτωσή σας :

function epiplo(Epiplo epiplo)
{
...
}

//ΟΠΟΥ Epiplo
class Epiplo
{
	public ?string onoma;
	public int mikos;
	//ktl
}

 

2) Μπορείται να κάνετε function με null value params

function epiplo(onoma, platos = null, mikos = null, ipsos = null){
	if(platos === null)
	{
		//Den exete eisagei ara...
		//Mporei ontos na einai 1 
		//Etsi den tha xerete an exete eisagei h oxi
		platos = 1;
	}
}

 

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

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

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

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

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

Σύνδεση

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

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