Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions _th/tour/named-arguments.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,56 @@ language: th
next-page: packages-and-imports
previous-page: default-parameter-values
---

เมื่อเราเรียกใช้ method แล้วเราสามารถระบุชื่อ argument (label the argument) สำหรับ parameter ใดๆ ได้ดังนี้:

{% tabs named-arguments-when-good %}

{% tab 'Scala 2 and 3' for=named-arguments-when-good %}

```scala mdoc
def printName(first: String, last: String): Unit =
println(s"$first $last")

printName("John", "Public") // แสดงค่า "John Public"
printName(first = "John", last = "Public") // แสดงค่า "John Public"
printName(last = "Public", first = "John") // แสดงค่า "John Public"
printName("Elton", last = "John") // แสดงค่า "Elton John"
```

{% endtab %}

{% endtabs %}

named argument นั้นมีประโยชน์เมื่อ parameter 2 ตัวมี type เดียวกัน\
ทำให้ argument ที่เราส่งไปให้ function อาจถูกสลับกันโดยไม่ได้ตั้งใจ

สังเกตว่าเราจะเขียน argument ที่ระบุชื่อในลำดับใดก็ได้\
แต่ถ้า argument ไม่ได้อยู่ในลำดับของ parameter ใน function จากซ้ายไปขวา แล้ว argument ที่เหลือจะต้องระบุชื่อทั้งหมด

ในตัวอย่างข้างล่างนี้ named argument ทำให้เราสามารถเว้น parameter `middle` ได้\
แต่ในกรณีที่เกิด `error: positional after named argument`\
เนื่องจาก argument ตัวแรกไม่ได้เรียงตามลำดับของ parameter (ตัวแรกไม่ใช่ parameter `first` และ argument ตัวที่ 2 เป็นต้นไปก็ไม่ได้ระบุชื่อด้วย)\
ดังนั้น เราจะต้องระบุชื่อ argument ตั้งแต่ตัวที่ 2 เป็นต้นไป

{% tabs named-arguments-when-error %}

{% tab 'Scala 2 and 3' for=named-arguments-when-error %}

```scala mdoc:fail
def printFullName(first: String, middle: String = "Q.", last: String): Unit =
println(s"$first $middle $last")

printFullName(first = "John", last = "Public") // แสดงค่า "John Q. Public"
printFullName("John", last = "Public") // แสดงค่า "John Q. Public"
printFullName("John", middle = "Quincy", "Public") // แสดงค่า "John Quincy Public"
printFullName(last = "Public", first = "John") // แสดงค่า "John Q. Public"
printFullName(last = "Public", "John") // error: positional after named argument
```

{% endtab %}

{% endtabs %}

เราสามารถใช้ Named Argument กับการเรียกใช้ method ของ Java ได้\
แต่ทำได้เฉพาะในกรณีที่ Java library นั้นถูกคอมไพล์ด้วยออพชั่น `-parameters` เท่านั้น