From 5bb764e58e26e31488bb173b93b6f4d0ff916bf7 Mon Sep 17 00:00:00 2001 From: Florian Merz Date: Thu, 11 Feb 2021 14:45:47 +0100 Subject: unslug el: move --- .../functions/default_parameters/index.html | 221 +++++++++++++++++++++ .../index.html" | 221 --------------------- 2 files changed, 221 insertions(+), 221 deletions(-) create mode 100644 files/el/web/javascript/reference/functions/default_parameters/index.html delete mode 100644 "files/el/web/javascript/reference/functions/\317\200\317\201\316\277\316\265\317\200\316\271\316\273\316\265\316\263\316\274\316\255\316\275\316\265\317\202_\317\200\316\261\317\201\316\254\316\274\316\265\317\204\317\201\316\277\316\271/index.html" (limited to 'files/el/web') diff --git a/files/el/web/javascript/reference/functions/default_parameters/index.html b/files/el/web/javascript/reference/functions/default_parameters/index.html new file mode 100644 index 0000000000..1802637dce --- /dev/null +++ b/files/el/web/javascript/reference/functions/default_parameters/index.html @@ -0,0 +1,221 @@ +--- +title: Προεπιλεγμένες παράμετροι +slug: Web/JavaScript/Reference/Functions/Προεπιλεγμένες_παράμετροι +tags: + - ECMAScript 2015 + - JavaScript + - Συναρτήσεις +translation_of: Web/JavaScript/Reference/Functions/Default_parameters +--- +
{{jsSidebar("Συναρτήσεις")}}
+ +

Οι προεπιλεγμένες παράμετροι συναρτήσεων επιτρέπουν την αρχικοποίηση των παραμέτρων με προεπιλεγμένες τιμες, αν η τιμή λείπει ή ειναι τύπου undefined.

+ +
{{EmbedInteractiveExample("pages/js/functions-default.html")}}
+ + + +

Σύνταξη

+ +
function [όνομα]([παράμ1[ = προεπιλεγμένηΤιμή1 ][, ..., παράμN[ = προεπιλεγμένηΤιμήN ]]]) {δηλώσεις
+}
+
+ +

Περιγραφή

+ +

Στην JavaScript, οι προεπιλεγμένες παράμετροι των συναρτήσεων ειναι τύπου {{jsxref("undefined")}}. Ωστόσο, σε κάποιες καταστάσεις μπορεί να χρειαστεί να θέσουμε μια διαφορετική προεπιλεγμένη τιμή. Σε αυτή την περίπτωση μπορούν βοηθήσουν οι προεπιλεγμένες παράμετροι.

+ +

Στο παρελθόν, η γενική στρατηγική ορισμού προεπιλεγμένων τιμών, ηταν ο έλεγχος των τιμών στο σώμα την συνάρτησης και η εκχώρηση τιμής στην περίπτωση που ήταν τύπου undefined. Αν στο επόμενο παράδειγμα, δεν δοθεί τιμή για την b οταν κλήθει η συναρτηση, η τιμή της θα ήταν undefined  κατα την εκτίμηση του a*b και η κλήση της multiply θα επέστρεφε NaN. Ωστόσο, αυτό αποτρέπεται στην δεύτερη γραμμή του παραδείγματος:

+ +
function multiply(a, b) {
+  b = (typeof b !== 'undefined') ?  b : 1;
+  return a * b;
+}
+
+multiply(5, 2); // 10
+multiply(5, 1); // 5
+multiply(5);    // 5
+
+ +

Με τις προεπιλεγμένες παραμέτρους στην ES2015, ο έλεγχος στο σώμα της συνάρτησης δεν ειναι πια απαραίτητος. Τωρα μπορούμε απλα να θέσουμε 1 ως προεπιλεγμένη τιμή της b στην κεφαλή της συνάρτησης:

+ +
function multiply(a, b = 1) {
+  return a * b;
+}
+
+multiply(5, 2); // 10
+multiply(5, 1); // 5
+multiply(5);    // 5
+
+ +

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

+ +

Περνώντας undefined σε αντίθεση με άλλες falsy τιμες

+ +

Στην δεύτερη κλήση εδω, ακόμα και αν η δεύτερη παράμετρος είναι ρητά undefined (αλλά οχι null ή άλλες falsy τιμές) κατα την κλήση, η τιμή της παραμέτρου num είναι η προεπιλεγμένη.

+ +
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)
+
+ +

Εκτίμηση κατα την κλήση

+ +

Η προεπιλεγμένη παράμετρος εκτιμάται κατα την κλήση, οπότε αντίθετα με την Python για παραδειγμα, ενα νεο αντικείμενο δημιουργείται καθε φορά που καλείται η συνάρτηση.

+ +
function append(value, array = []) {
+  array.push(value);
+  return array;
+}
+
+append(1); //[1]
+append(2); //[2], όχι [1, 2]
+
+
+ +

Αυτό εφαρμόζεται ακομα και στις συναρτήσεις και τις μεταβλητές:

+ +
function callSomething(thing = something()) {
+ return thing;
+}
+
+function something() {
+  return 'sth';
+}
+
+callSomething();  //sth
+ +

Οι προεπιλεγμένες παράμετροι ειναι διαθέσιμες σε επόμενες προεπιλεγμένες παραμέτρους

+ +

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

+ +
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.')
+
+ +

Αυτή η λειτουργικότητα υπολογίζεται σταδιακά. Το επόμενο παράδειγμα επιδεικνύει το πως χειρίζονται άλλες ακραίες περιπτώσεις.

+ +
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, "=^_^="]
+
+ +

Συναρτήσεις που ορίζονται μεσα στο σώμα της συνάρτησης

+ +

Εισάχθηκε στο Gecko 33 {{geckoRelease(33)}}. Οι συναρτήσεις που ορίζονται στο σώμα της συνάρτησης δεν μπορούν να αναφέρονται στίς προεπιλεγμένες παραμέτρους και εμφανίζουν ενα {{jsxref("ReferenceError")}} (αυτή τη στιγμή {{jsxref("TypeError")}} στο SpiderMonkey, βλέπε {{bug(1022967)}}). Οι προεπιλεγμένες παράμετροι εκτελούνται παντα πρώτες και στην συνέχεια εκτελούνται οι δηλώσεις που βρίσκονται στο σώμα της συνάρτησης.

+ +
// Doesn't work! Throws ReferenceError.
+function f(a = go()) {
+  function go() { return ':P'; }
+}
+
+ +

Παράμετροι χωρίς προεπιλεγμένες τιμες μετα τις προεπιλεγμενες παραμέτρους

+ +

Πριν απο το Gecko 26 {{geckoRelease(26)}}, ο ακόλουθος κώδικας προκαλούσε ένα {{jsxref("SyntaxError")}}. Αυτό επιδιορθώθηκε στο {{bug(777060)}} και έχει την αναμενόμενη λειτουργία σε επόμενες εκδόσεις. Οι παράμετροι ορίζονται ακόμα απο τα αριστερά στα δεξιά, αντικαθιστώντας προεπιλεγμένες παραμέτρους ακόμα και αν υπάρχουν επόμενες παράμετροι χωρίς προεπιλεγμένες τιμές.

+ +
function f(x = 1, y) {
+  return [x, y];
+}
+
+f(); // [1, undefined]
+f(2); // [2, undefined]
+
+ +

Αποδόμηση παραμέτρων στον ορισμό προεπιλεγμένων τιμών

+ +

Στον ορισμό προεπιλεγμένων παραμέτρων μπορεί να χρησιμοποιηθεί αποδομημένη ανάθεση:

+ +
function f([x, y] = [1, 2], {z: z} = {z: 3}) {
+  return x + y + z;
+}
+
+f(); // 6
+ +

Προδιαγραφές

+ + + + + + + + + + + + + + + + + + + +
ΠροδιαγραφήΚατάστασηΣχόλιο
{{SpecName('ES2015', '#sec-function-definitions', 'Function Definitions')}}{{Spec2('ES2015')}}Αρχικός ορισμός.
{{SpecName('ESDraft', '#sec-function-definitions', 'Function Definitions')}}{{Spec2('ESDraft')}} 
+ +

Συμβατότητα περιηγητών

+ +
+ + +

{{Compat("javascript.functions.default_parameters")}}

+
+ +

Δείτε επίσης

+ + diff --git "a/files/el/web/javascript/reference/functions/\317\200\317\201\316\277\316\265\317\200\316\271\316\273\316\265\316\263\316\274\316\255\316\275\316\265\317\202_\317\200\316\261\317\201\316\254\316\274\316\265\317\204\317\201\316\277\316\271/index.html" "b/files/el/web/javascript/reference/functions/\317\200\317\201\316\277\316\265\317\200\316\271\316\273\316\265\316\263\316\274\316\255\316\275\316\265\317\202_\317\200\316\261\317\201\316\254\316\274\316\265\317\204\317\201\316\277\316\271/index.html" deleted file mode 100644 index 1802637dce..0000000000 --- "a/files/el/web/javascript/reference/functions/\317\200\317\201\316\277\316\265\317\200\316\271\316\273\316\265\316\263\316\274\316\255\316\275\316\265\317\202_\317\200\316\261\317\201\316\254\316\274\316\265\317\204\317\201\316\277\316\271/index.html" +++ /dev/null @@ -1,221 +0,0 @@ ---- -title: Προεπιλεγμένες παράμετροι -slug: Web/JavaScript/Reference/Functions/Προεπιλεγμένες_παράμετροι -tags: - - ECMAScript 2015 - - JavaScript - - Συναρτήσεις -translation_of: Web/JavaScript/Reference/Functions/Default_parameters ---- -
{{jsSidebar("Συναρτήσεις")}}
- -

Οι προεπιλεγμένες παράμετροι συναρτήσεων επιτρέπουν την αρχικοποίηση των παραμέτρων με προεπιλεγμένες τιμες, αν η τιμή λείπει ή ειναι τύπου undefined.

- -
{{EmbedInteractiveExample("pages/js/functions-default.html")}}
- - - -

Σύνταξη

- -
function [όνομα]([παράμ1[ = προεπιλεγμένηΤιμή1 ][, ..., παράμN[ = προεπιλεγμένηΤιμήN ]]]) {δηλώσεις
-}
-
- -

Περιγραφή

- -

Στην JavaScript, οι προεπιλεγμένες παράμετροι των συναρτήσεων ειναι τύπου {{jsxref("undefined")}}. Ωστόσο, σε κάποιες καταστάσεις μπορεί να χρειαστεί να θέσουμε μια διαφορετική προεπιλεγμένη τιμή. Σε αυτή την περίπτωση μπορούν βοηθήσουν οι προεπιλεγμένες παράμετροι.

- -

Στο παρελθόν, η γενική στρατηγική ορισμού προεπιλεγμένων τιμών, ηταν ο έλεγχος των τιμών στο σώμα την συνάρτησης και η εκχώρηση τιμής στην περίπτωση που ήταν τύπου undefined. Αν στο επόμενο παράδειγμα, δεν δοθεί τιμή για την b οταν κλήθει η συναρτηση, η τιμή της θα ήταν undefined  κατα την εκτίμηση του a*b και η κλήση της multiply θα επέστρεφε NaN. Ωστόσο, αυτό αποτρέπεται στην δεύτερη γραμμή του παραδείγματος:

- -
function multiply(a, b) {
-  b = (typeof b !== 'undefined') ?  b : 1;
-  return a * b;
-}
-
-multiply(5, 2); // 10
-multiply(5, 1); // 5
-multiply(5);    // 5
-
- -

Με τις προεπιλεγμένες παραμέτρους στην ES2015, ο έλεγχος στο σώμα της συνάρτησης δεν ειναι πια απαραίτητος. Τωρα μπορούμε απλα να θέσουμε 1 ως προεπιλεγμένη τιμή της b στην κεφαλή της συνάρτησης:

- -
function multiply(a, b = 1) {
-  return a * b;
-}
-
-multiply(5, 2); // 10
-multiply(5, 1); // 5
-multiply(5);    // 5
-
- -

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

- -

Περνώντας undefined σε αντίθεση με άλλες falsy τιμες

- -

Στην δεύτερη κλήση εδω, ακόμα και αν η δεύτερη παράμετρος είναι ρητά undefined (αλλά οχι null ή άλλες falsy τιμές) κατα την κλήση, η τιμή της παραμέτρου num είναι η προεπιλεγμένη.

- -
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)
-
- -

Εκτίμηση κατα την κλήση

- -

Η προεπιλεγμένη παράμετρος εκτιμάται κατα την κλήση, οπότε αντίθετα με την Python για παραδειγμα, ενα νεο αντικείμενο δημιουργείται καθε φορά που καλείται η συνάρτηση.

- -
function append(value, array = []) {
-  array.push(value);
-  return array;
-}
-
-append(1); //[1]
-append(2); //[2], όχι [1, 2]
-
-
- -

Αυτό εφαρμόζεται ακομα και στις συναρτήσεις και τις μεταβλητές:

- -
function callSomething(thing = something()) {
- return thing;
-}
-
-function something() {
-  return 'sth';
-}
-
-callSomething();  //sth
- -

Οι προεπιλεγμένες παράμετροι ειναι διαθέσιμες σε επόμενες προεπιλεγμένες παραμέτρους

- -

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

- -
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.')
-
- -

Αυτή η λειτουργικότητα υπολογίζεται σταδιακά. Το επόμενο παράδειγμα επιδεικνύει το πως χειρίζονται άλλες ακραίες περιπτώσεις.

- -
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, "=^_^="]
-
- -

Συναρτήσεις που ορίζονται μεσα στο σώμα της συνάρτησης

- -

Εισάχθηκε στο Gecko 33 {{geckoRelease(33)}}. Οι συναρτήσεις που ορίζονται στο σώμα της συνάρτησης δεν μπορούν να αναφέρονται στίς προεπιλεγμένες παραμέτρους και εμφανίζουν ενα {{jsxref("ReferenceError")}} (αυτή τη στιγμή {{jsxref("TypeError")}} στο SpiderMonkey, βλέπε {{bug(1022967)}}). Οι προεπιλεγμένες παράμετροι εκτελούνται παντα πρώτες και στην συνέχεια εκτελούνται οι δηλώσεις που βρίσκονται στο σώμα της συνάρτησης.

- -
// Doesn't work! Throws ReferenceError.
-function f(a = go()) {
-  function go() { return ':P'; }
-}
-
- -

Παράμετροι χωρίς προεπιλεγμένες τιμες μετα τις προεπιλεγμενες παραμέτρους

- -

Πριν απο το Gecko 26 {{geckoRelease(26)}}, ο ακόλουθος κώδικας προκαλούσε ένα {{jsxref("SyntaxError")}}. Αυτό επιδιορθώθηκε στο {{bug(777060)}} και έχει την αναμενόμενη λειτουργία σε επόμενες εκδόσεις. Οι παράμετροι ορίζονται ακόμα απο τα αριστερά στα δεξιά, αντικαθιστώντας προεπιλεγμένες παραμέτρους ακόμα και αν υπάρχουν επόμενες παράμετροι χωρίς προεπιλεγμένες τιμές.

- -
function f(x = 1, y) {
-  return [x, y];
-}
-
-f(); // [1, undefined]
-f(2); // [2, undefined]
-
- -

Αποδόμηση παραμέτρων στον ορισμό προεπιλεγμένων τιμών

- -

Στον ορισμό προεπιλεγμένων παραμέτρων μπορεί να χρησιμοποιηθεί αποδομημένη ανάθεση:

- -
function f([x, y] = [1, 2], {z: z} = {z: 3}) {
-  return x + y + z;
-}
-
-f(); // 6
- -

Προδιαγραφές

- - - - - - - - - - - - - - - - - - - -
ΠροδιαγραφήΚατάστασηΣχόλιο
{{SpecName('ES2015', '#sec-function-definitions', 'Function Definitions')}}{{Spec2('ES2015')}}Αρχικός ορισμός.
{{SpecName('ESDraft', '#sec-function-definitions', 'Function Definitions')}}{{Spec2('ESDraft')}} 
- -

Συμβατότητα περιηγητών

- -
- - -

{{Compat("javascript.functions.default_parameters")}}

-
- -

Δείτε επίσης

- - -- cgit v1.2.3-54-g00ecf