diff options
Diffstat (limited to 'files/el/web/javascript/reference/functions/default_parameters')
-rw-r--r-- | files/el/web/javascript/reference/functions/default_parameters/index.html | 222 |
1 files changed, 0 insertions, 222 deletions
diff --git a/files/el/web/javascript/reference/functions/default_parameters/index.html b/files/el/web/javascript/reference/functions/default_parameters/index.html deleted file mode 100644 index e3229bc633..0000000000 --- a/files/el/web/javascript/reference/functions/default_parameters/index.html +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: Προεπιλεγμένες παράμετροι -slug: Web/JavaScript/Reference/Functions/Default_parameters -tags: - - ECMAScript 2015 - - JavaScript - - Συναρτήσεις -translation_of: Web/JavaScript/Reference/Functions/Default_parameters -original_slug: Web/JavaScript/Reference/Functions/Προεπιλεγμένες_παράμετροι ---- -<div>{{jsSidebar("Συναρτήσεις")}}</div> - -<p>Οι<strong> προεπιλεγμένες παράμετροι συναρτήσεων</strong> επιτρέπουν την αρχικοποίηση των παραμέτρων με προεπιλεγμένες τιμες, αν η τιμή λείπει ή ειναι τύπου <code>undefined</code>.</p> - -<div>{{EmbedInteractiveExample("pages/js/functions-default.html")}}</div> - -<p class="hidden">Ο πηγαίος κώδικας αυτού του διαδραστικού παραδείγματος είναι αποθηκευμένος σε ενα GitHub αποθετήριο. Αν θα θέλατε να συμβάλλετε στο έργο των διαδραστικών παραδειγμάτων, παρακαλώ κάντε clone το <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> και στείλτε μας ενα pull request.</p> - -<h2 id="Σύνταξη">Σύνταξη</h2> - -<pre class="syntaxbox">function [<em>όνομα</em>]([<em>παράμ1</em>[ = προεπιλεγμένηΤιμή1 ][, ..., <em>παράμN</em>[ = προεπιλεγμένηΤιμήN ]]]) {<em>δηλώσεις</em> -} -</pre> - -<h2 id="Περιγραφή">Περιγραφή</h2> - -<p>Στην JavaScript, οι προεπιλεγμένες παράμετροι των συναρτήσεων ειναι τύπου <code>{{jsxref("undefined")}}</code>. Ωστόσο, σε κάποιες καταστάσεις μπορεί να χρειαστεί να θέσουμε μια διαφορετική προεπιλεγμένη τιμή. Σε αυτή την περίπτωση μπορούν βοηθήσουν οι προεπιλεγμένες παράμετροι.</p> - -<p>Στο παρελθόν, η γενική στρατηγική ορισμού προεπιλεγμένων τιμών, ηταν ο έλεγχος των τιμών στο σώμα την συνάρτησης και η εκχώρηση τιμής στην περίπτωση που ήταν τύπου <code>undefined</code>. Αν στο επόμενο παράδειγμα, δεν δοθεί τιμή για την <code>b</code> οταν κλήθει η συναρτηση, η τιμή της θα ήταν <code>undefined</code> κατα την εκτίμηση του <code>a*b</code> και η κλήση της <code>multiply</code> θα επέστρεφε <code>NaN</code>. Ωστόσο, αυτό αποτρέπεται στην δεύτερη γραμμή του παραδείγματος:</p> - -<pre class="brush: js">function multiply(a, b) { - b = (typeof b !== 'undefined') ? b : 1; - return a * b; -} - -multiply(5, 2); // 10 -multiply(5, 1); // 5 -multiply(5); // 5 -</pre> - -<p>Με τις προεπιλεγμένες παραμέτρους στην ES2015, ο έλεγχος στο σώμα της συνάρτησης δεν ειναι πια απαραίτητος. Τωρα μπορούμε απλα να θέσουμε <code>1</code> ως προεπιλεγμένη τιμή της <code>b</code> στην κεφαλή της συνάρτησης:</p> - -<pre class="brush: js">function multiply(a, b = 1) { - return a * b; -} - -multiply(5, 2); // 10 -multiply(5, 1); // 5 -multiply(5); // 5 -</pre> - -<h2 id="Παραδείγματα">Παραδείγματα</h2> - -<h3 id="Περνώντας_undefined_σε_αντίθεση_με_άλλες_falsy_τιμες">Περνώντας <code>undefined</code> σε αντίθεση με άλλες falsy τιμες</h3> - -<p>Στην δεύτερη κλήση εδω, ακόμα και αν η δεύτερη παράμετρος είναι ρητά <code>undefined</code> (αλλά οχι <code>null</code> ή άλλες <em>falsy τιμές</em>) κατα την κλήση, η τιμή της παραμέτρου <code>num</code> είναι η προεπιλεγμένη.</p> - -<pre class="brush: js">function test(num = 1) { - console.log(typeof num); -} - -test(); // 'number' (η num παίρνει τιμή 1) -test(undefined); // 'number' (η num επίσης παίρνει τιμή 1) - -// test with other falsy values: -test(''); // 'string' (η num παίρνει τιμή '') -test(null); // 'object' (η num παίρνει τιμή null) -</pre> - -<h3 id="Εκτίμηση_κατα_την_κλήση">Εκτίμηση κατα την κλήση</h3> - -<p>Η προεπιλεγμένη παράμετρος εκτιμάται κατα την κλήση, οπότε αντίθετα με την Python για παραδειγμα, ενα νεο αντικείμενο δημιουργείται καθε φορά που καλείται η συνάρτηση.</p> - -<pre class="brush: js">function append(value, array = []) { - array.push(value); - return array; -} - -append(1); //[1] -append(2); //[2], όχι [1, 2] - -</pre> - -<p>Αυτό εφαρμόζεται ακομα και στις συναρτήσεις και τις μεταβλητές:</p> - -<pre class="brush: js">function callSomething(thing = something()) { - return thing; -} - -function something() { - return 'sth'; -} - -callSomething(); //sth</pre> - -<h3 id="Οι_προεπιλεγμένες_παράμετροι_ειναι_διαθέσιμες_σε_επόμενες_προεπιλεγμένες_παραμέτρους">Οι προεπιλεγμένες παράμετροι ειναι διαθέσιμες σε επόμενες προεπιλεγμένες παραμέτρους</h3> - -<p>Οι παράμετροι που εχουν ήδη συναντηθεί είναι διαθέσιμες και στις επόμενες προεπιλεγμένες παραμέτρους:</p> - -<pre class="brush: js">function singularAutoPlural(singular, plural = singular + 's', - rallyingCry = plural + ' ATTACK!!!') { - return [singular, plural, rallyingCry]; -} - -//["Gecko","Geckos", "Geckos ATTACK!!!"] -singularAutoPlural('Gecko'); - -//["Fox","Foxes", "Foxes ATTACK!!!"] -singularAutoPlural('Fox', 'Foxes'); - -//["Deer", "Deer", "Deer ... change."] -singularAutoPlural('Deer', 'Deer', 'Deer peaceably and respectfully \ - petition the government for positive change.') -</pre> - -<p>Αυτή η λειτουργικότητα υπολογίζεται σταδιακά. Το επόμενο παράδειγμα επιδεικνύει το πως χειρίζονται άλλες ακραίες περιπτώσεις.</p> - -<pre class="brush: js">function go() { - return ':P'; -} - -function withDefaults(a, b = 5, c = b, d = go(), e = this, - f = arguments, g = this.value) { - return [a, b, c, d, e, f, g]; -} - -function withoutDefaults(a, b, c, d, e, f, g) { - switch (arguments.length) { - case 0: - a; - case 1: - b = 5; - case 2: - c = b; - case 3: - d = go(); - case 4: - e = this; - case 5: - f = arguments; - case 6: - g = this.value; - default: - } - return [a, b, c, d, e, f, g]; -} - -withDefaults.call({value: '=^_^='}); -// [undefined, 5, 5, ":P", {value:"=^_^="}, arguments, "=^_^="] - - -withoutDefaults.call({value: '=^_^='}); -// [undefined, 5, 5, ":P", {value:"=^_^="}, arguments, "=^_^="] -</pre> - -<h3 id="Συναρτήσεις_που_ορίζονται_μεσα_στο_σώμα_της_συνάρτησης">Συναρτήσεις που ορίζονται μεσα στο σώμα της συνάρτησης</h3> - -<p>Εισάχθηκε στο Gecko 33 {{geckoRelease(33)}}. Οι συναρτήσεις που ορίζονται στο σώμα της συνάρτησης δεν μπορούν να αναφέρονται στίς προεπιλεγμένες παραμέτρους και εμφανίζουν ενα {{jsxref("ReferenceError")}} (αυτή τη στιγμή {{jsxref("TypeError")}} στο SpiderMonkey, βλέπε {{bug(1022967)}}). Οι προεπιλεγμένες παράμετροι εκτελούνται παντα πρώτες και στην συνέχεια εκτελούνται οι δηλώσεις που βρίσκονται στο σώμα της συνάρτησης.</p> - -<pre class="brush: js">// Doesn't work! Throws ReferenceError. -function f(a = go()) { - function go() { return ':P'; } -} -</pre> - -<h3 id="Παράμετροι_χωρίς_προεπιλεγμένες_τιμες_μετα_τις_προεπιλεγμενες_παραμέτρους">Παράμετροι χωρίς προεπιλεγμένες τιμες μετα τις προεπιλεγμενες παραμέτρους</h3> - -<p>Πριν απο το Gecko 26 {{geckoRelease(26)}}, ο ακόλουθος κώδικας προκαλούσε ένα {{jsxref("SyntaxError")}}. Αυτό επιδιορθώθηκε στο {{bug(777060)}} και έχει την αναμενόμενη λειτουργία σε επόμενες εκδόσεις. Οι παράμετροι ορίζονται ακόμα απο τα αριστερά στα δεξιά, αντικαθιστώντας προεπιλεγμένες παραμέτρους ακόμα και αν υπάρχουν επόμενες παράμετροι χωρίς προεπιλεγμένες τιμές.</p> - -<pre class="brush: js">function f(x = 1, y) { - return [x, y]; -} - -f(); // [1, undefined] -f(2); // [2, undefined] -</pre> - -<h3 id="Αποδόμηση_παραμέτρων_στον_ορισμό_προεπιλεγμένων_τιμών">Αποδόμηση παραμέτρων στον ορισμό προεπιλεγμένων τιμών</h3> - -<p>Στον ορισμό προεπιλεγμένων παραμέτρων μπορεί να χρησιμοποιηθεί <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment">αποδομημένη ανάθεση</a>:</p> - -<pre class="brush: js">function f([x, y] = [1, 2], {z: z} = {z: 3}) { - return x + y + z; -} - -f(); // 6</pre> - -<h2 id="Προδιαγραφές">Προδιαγραφές</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Προδιαγραφή</th> - <th scope="col">Κατάσταση</th> - <th scope="col">Σχόλιο</th> - </tr> - <tr> - <td>{{SpecName('ES2015', '#sec-function-definitions', 'Function Definitions')}}</td> - <td>{{Spec2('ES2015')}}</td> - <td>Αρχικός ορισμός.</td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-function-definitions', 'Function Definitions')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td> </td> - </tr> - </tbody> -</table> - -<h2 id="Συμβατότητα_περιηγητών">Συμβατότητα περιηγητών</h2> - -<div> -<div class="hidden">Ο πίνακας συμβατότητας σε αυτή τη σελίδα παράγεται απο δομημένα δεδομένα. Αν θα θέλατε να συμβάλλετε στα δεδομένα, παρακαλώ κάντε checkout το <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> και στείλτε μας ένα pull request.</div> - -<p>{{Compat("javascript.functions.default_parameters")}}</p> -</div> - -<h2 id="Δείτε_επίσης">Δείτε επίσης</h2> - -<ul> - <li><a class="external" href="http://wiki.ecmascript.org/doku.php?id=harmony:parameter_default_values" rel="external" title="http://wiki.ecmascript.org/doku.php?id=harmony:parameter_default_values">Αρχική πρόταση στο ecmascript.org</a></li> -</ul> |