@@ -10,3 +10,56 @@ language: th
10
10
next-page : packages-and-imports
11
11
previous-page : default-parameter-values
12
12
---
13
+
14
+ เมื่อเราเรียกใช้ method แล้วเราสามารถระบุชื่อ argument (label the argument) สำหรับ parameter ใดๆ ได้ดังนี้:
15
+
16
+ {% tabs named-arguments-when-good %}
17
+
18
+ {% tab 'Scala 2 and 3' for=named-arguments-when-good %}
19
+
20
+ ``` scala mdoc
21
+ def printName (first : String , last : String ): Unit =
22
+ println(s " $first $last" )
23
+
24
+ printName(" John" , " Public" ) // แสดงค่า "John Public"
25
+ printName(first = " John" , last = " Public" ) // แสดงค่า "John Public"
26
+ printName(last = " Public" , first = " John" ) // แสดงค่า "John Public"
27
+ printName(" Elton" , last = " John" ) // แสดงค่า "Elton John"
28
+ ```
29
+
30
+ {% endtab %}
31
+
32
+ {% endtabs %}
33
+
34
+ named argument นั้นมีประโยชน์เมื่อ parameter 2 ตัวมี type เดียวกัน\
35
+ ทำให้ argument ที่เราส่งไปให้ function อาจถูกสลับกันโดยไม่ได้ตั้งใจ
36
+
37
+ สังเกตว่าเราจะเขียน argument ที่ระบุชื่อในลำดับใดก็ได้\
38
+ แต่ถ้า argument ไม่ได้อยู่ในลำดับของ parameter ใน function จากซ้ายไปขวา แล้ว argument ที่เหลือจะต้องระบุชื่อทั้งหมด
39
+
40
+ ในตัวอย่างข้างล่างนี้ named argument ทำให้เราสามารถเว้น parameter ` middle ` ได้\
41
+ แต่ในกรณีที่เกิด ` error: positional after named argument ` \
42
+ เนื่องจาก argument ตัวแรกไม่ได้เรียงตามลำดับของ parameter (ตัวแรกไม่ใช่ parameter ` first ` และ argument ตัวที่ 2 เป็นต้นไปก็ไม่ได้ระบุชื่อด้วย)\
43
+ ดังนั้น เราจะต้องระบุชื่อ argument ตั้งแต่ตัวที่ 2 เป็นต้นไป
44
+
45
+ {% tabs named-arguments-when-error %}
46
+
47
+ {% tab 'Scala 2 and 3' for=named-arguments-when-error %}
48
+
49
+ ``` scala mdoc:fail
50
+ def printFullName (first : String , middle : String = " Q." , last : String ): Unit =
51
+ println(s " $first $middle $last" )
52
+
53
+ printFullName(first = " John" , last = " Public" ) // แสดงค่า "John Q. Public"
54
+ printFullName(" John" , last = " Public" ) // แสดงค่า "John Q. Public"
55
+ printFullName(" John" , middle = " Quincy" , " Public" ) // แสดงค่า "John Quincy Public"
56
+ printFullName(last = " Public" , first = " John" ) // แสดงค่า "John Q. Public"
57
+ printFullName(last = " Public" , " John" ) // error: positional after named argument
58
+ ```
59
+
60
+ {% endtab %}
61
+
62
+ {% endtabs %}
63
+
64
+ เราสามารถใช้ Named Argument กับการเรียกใช้ method ของ Java ได้\
65
+ แต่ทำได้เฉพาะในกรณีที่ Java library นั้นถูกคอมไพล์ด้วยออพชั่น ` -parameters ` เท่านั้น
0 commit comments