@@ -10,3 +10,55 @@ language: th
1010next-page : packages-and-imports
1111previous-page : default-parameter-values
1212---
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 เนื่องจาก argument ตัวแรกอยู่นอกลำดับของ parameter (ตัวแรกไม่ใช่ parameter ` first ` )\
42+ ดังนั้น เราจะต้องระบุชื่อ argument ตั้งแต่ตัวที่ 2 เป็นต้นไป
43+
44+ {% tabs named-arguments-when-error %}
45+
46+ {% tab 'Scala 2 and 3' for=named-arguments-when-error %}
47+
48+ ``` scala mdoc:fail
49+ def printFullName (first : String , middle : String = " Q." , last : String ): Unit =
50+ println(s " $first $middle $last" )
51+
52+ printFullName(first = " John" , last = " Public" ) // แสดงค่า "John Q. Public"
53+ printFullName(" John" , last = " Public" ) // แสดงค่า "John Q. Public"
54+ printFullName(" John" , middle = " Quincy" , " Public" ) // แสดงค่า "John Quincy Public"
55+ printFullName(last = " Public" , first = " John" ) // แสดงค่า "John Q. Public"
56+ printFullName(last = " Public" , " John" ) // error: positional after named argument
57+ ```
58+
59+ {% endtab %}
60+
61+ {% endtabs %}
62+
63+ เราสามารถใช้ Named Argument กับการเรียกใช้ method ของ Java ได้\
64+ แต่ทำได้เฉพาะในกรณีที่ Java library นั้นถูกคอมไพล์ด้วยออพชั่น ` -parameters ` เท่านั้น
0 commit comments