Dart รองรับทั้งพารามิเตอร์ที่กำหนดชื่อและพารามิเตอร์ทางเลือกเพิ่มเติม ความแตกต่างระหว่างสองคืออะไร
นอกจากนี้คุณจะทราบได้อย่างไรว่ามีการระบุพารามิเตอร์ทางเลือกจริงหรือไม่
Dart รองรับทั้งพารามิเตอร์ที่กำหนดชื่อและพารามิเตอร์ทางเลือกเพิ่มเติม ความแตกต่างระหว่างสองคืออะไร
นอกจากนี้คุณจะทราบได้อย่างไรว่ามีการระบุพารามิเตอร์ทางเลือกจริงหรือไม่
คำตอบ:
โผมีสองประเภทของพารามิเตอร์ดังนี้ชื่อและตำแหน่ง ก่อนที่ฉันจะพูดถึงความแตกต่างฉันขอพูดคุยเกี่ยวกับความคล้ายคลึงกันก่อน
พารามิเตอร์ทางเลือกของ Dart เป็นทางเลือกที่ผู้โทรไม่จำเป็นต้องระบุค่าสำหรับพารามิเตอร์เมื่อเรียกใช้ฟังก์ชัน
พารามิเตอร์ทางเลือกสามารถประกาศได้หลังจากพารามิเตอร์ที่จำเป็น
พารามิเตอร์ทางเลือกสามารถมีค่าเริ่มต้นซึ่งจะใช้เมื่อผู้โทรไม่ได้ระบุค่า
พารามิเตอร์ทางเลือกตำแหน่ง
พารามิเตอร์ที่ถูกล้อมด้วย[ ]
เป็นพารามิเตอร์ทางเลือกตำแหน่ง นี่คือตัวอย่าง:
getHttpUrl(String server, String path, [int port=80]) {
// ...
}
ในโค้ดข้างต้นเป็นตัวเลือกและมีค่าเริ่มต้นของport
80
คุณสามารถโทรgetHttpUrl
โดยใช้หรือไม่ใช้พารามิเตอร์ที่สาม
getHttpUrl('example.com', '/index.html', 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
คุณสามารถระบุพารามิเตอร์หลายตำแหน่งสำหรับฟังก์ชั่น:
getHttpUrl(String server, String path, [int port=80, int numRetries=3]) {
// ...
}
พารามิเตอร์ตัวเลือกที่มีตำแหน่งในการที่คุณไม่สามารถละเว้นถ้าคุณต้องการระบุport
numRetries
getHttpUrl('example.com', '/index.html');
getHttpUrl('example.com', '/index.html', 8080);
getHttpUrl('example.com', '/index.html', 8080, 5);
แน่นอนว่าถ้าคุณไม่ทราบว่า 8080 และ 5 คืออะไรมันยากที่จะบอกว่าตัวเลขเวทมนต์เหล่านั้นคืออะไร คุณสามารถใช้พารามิเตอร์ทางเลือกชื่อเพื่อสร้าง API ที่อ่านได้มากขึ้น
พารามิเตอร์ทางเลือกชื่อ
พารามิเตอร์ที่ถูกหุ้มด้วย{ }
เป็นพารามิเตอร์ทางเลือกที่มีชื่อ นี่คือตัวอย่าง:
getHttpUrl(String server, String path, {int port = 80}) {
// ...
}
คุณสามารถโทรgetHttpUrl
โดยใช้หรือไม่ใช้พารามิเตอร์ที่สาม คุณต้องใช้ชื่อพารามิเตอร์เมื่อเรียกใช้ฟังก์ชัน
getHttpUrl('example.com', '/index.html', port: 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
คุณสามารถระบุพารามิเตอร์ที่มีชื่อหลายรายการสำหรับฟังก์ชั่น:
getHttpUrl(String server, String path, {int port = 80, int numRetries = 3}) {
// ...
}
เนื่องจากพารามิเตอร์ที่ระบุชื่อถูกอ้างอิงโดยชื่อพวกเขาสามารถใช้ในลำดับที่แตกต่างจากการประกาศของพวกเขา
getHttpUrl('example.com', '/index.html');
getHttpUrl('example.com', '/index.html', port: 8080);
getHttpUrl('example.com', '/index.html', port: 8080, numRetries: 5);
getHttpUrl('example.com', '/index.html', numRetries: 5, port: 8080);
getHttpUrl('example.com', '/index.html', numRetries: 5);
ฉันเชื่อว่าพารามิเตอร์ที่มีชื่อทำให้ไซต์การโทรที่เข้าใจง่ายขึ้นโดยเฉพาะอย่างยิ่งเมื่อมีการตั้งค่าสถานะบูลีนหรือหมายเลขที่ไม่อยู่ในบริบท
ตรวจสอบว่ามีการระบุพารามิเตอร์เผื่อเลือกหรือไม่
น่าเสียดายที่คุณไม่สามารถแยกแยะความแตกต่างระหว่างเคส "ไม่ได้ระบุพารามิเตอร์ที่เป็นทางเลือก" และ "พารามิเตอร์ทางเลือกได้รับการกำหนดให้เป็นค่าเริ่มต้น"
หมายเหตุ:คุณอาจใช้พารามิเตอร์ทางเลือกตำแหน่งหรือตั้งชื่อพารามิเตอร์ทางเลือกแต่ไม่ใช่ทั้งสองอย่างในฟังก์ชั่นหรือวิธีการเดียวกัน ไม่อนุญาตสิ่งต่อไปนี้
thisFunctionWontWork(String foo, [String positonal], {String named}) {
// will not work!
}
ใน Dart ด้วยความเข้าใจของฉันพารามิเตอร์ method สามารถให้ในสองประเภท
>> พารามิเตอร์ที่จำเป็น
พารามิเตอร์ที่ต้องการคือพารามิเตอร์แบบเก่าที่รู้จักกันดีซึ่งเราทุกคนคุ้นเคย
ตัวอย่าง :
findVolume(int length, int breath, int height) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,30);
เอาท์พุท:
length = 10, breath = 20, height = 30
>> พารามิเตอร์ตำแหน่งเพิ่มเติม
พารามิเตอร์จะถูกเปิดเผยด้วยวงเล็บเหลี่ยม[] & พารามิเตอร์วงเล็บเหลี่ยมเป็นตัวเลือก
ตัวอย่าง:
findVolume(int length, int breath, [int height]) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,30);//valid
findVolume(10,20);//also valid
เอาท์พุท:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null // no value passed so height is null
>> พารามิเตอร์ที่กำหนดชื่อเป็นตัวเลือก
ตัวอย่าง:
findVolume(int length, int breath, {int height}) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,height:30);//valid & we can see the parameter name is mentioned here.
findVolume(10,20);//also valid
เอาท์พุท:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null
>> พารามิเตอร์เริ่มต้นที่เป็นตัวเลือก
ตัวอย่าง:
findVolume(int length, int breath, {int height=10}) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,height:30);//valid
findVolume(10,20);//valid
เอาท์พุท:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = 10 // default value 10 is taken
ขอบคุณสำหรับคำอธิบายที่ชัดเจนจากลิงก์วิดีโอนี้เครดิตสำหรับผู้สร้างวิดีโอ
ลิงก์วิดีโอ: ตัวเลือกเพิ่มเติมพารามิเตอร์พารามิเตอร์
เมื่อระบุพารามิเตอร์ของฟังก์ชันโดยใช้ไวยากรณ์ "paramName: value" ดังนั้นจึงเป็นพารามิเตอร์ที่มีชื่อ พารามิเตอร์ดังกล่าวสามารถแสดงผลเป็นทางเลือกโดยใส่ไว้ในวงเล็บ [และ] การสาธิตฟังก์ชั่นนี้สามารถแสดงให้เห็นได้ในโปรแกรม Hello World ดังต่อไปนี้:
sayHello([String name = ' World!']) {
print('Hello, ${name}');
}
void main() {
sayHello('Govind');
}
จากเอกสารเราพบว่าทั้งสองpositional
และnamed
พารามิเตอร์เป็นตัวเลือกซึ่งหมายความว่าพวกเขาทั้งหมดสามารถหายไป
ในความคิดของnamed
พารามิเตอร์ที่เข้มงวดมากขึ้นกว่าpositional
คน ตัวอย่างเช่นหากคุณประกาศวิธีดังกล่าว:
String say({String from, String msg})
ดังกล่าวข้างต้นfrom
และmsg
มีnamed
พารามิเตอร์เมื่อคุณเรียกวิธีการที่คุณจะต้องใช้say
say(from: "xx", msg: "xx")
กุญแจไม่สามารถหายไป
อย่างไรก็ตามหากคุณใช้พารามิเตอร์ตำแหน่งคุณจะว่าง
Named
พารามิเตอร์ถูกเรียกเช่นนั้นเพราะคุณสามารถระบุได้จริงตามชื่อและไม่ใช่ตามตำแหน่ง (ถ้าคุณสลับตำแหน่งของ params สองชื่อมันไม่สำคัญ) ดูคำตอบข้างต้นจาก Savaranaraja
พารามิเตอร์ตำแหน่ง:
พวกเขาเหมือนกับพารามิเตอร์เริ่มต้น ตัวอย่างเช่น:
void add(int x, [int y = 3]);
นี่ y มีค่าเริ่มต้นเป็น 3
พารามิเตอร์ที่มีชื่อ:
เหล่านี้คือพารามิเตอร์ที่สามารถส่งผ่านในลำดับใด ๆ โดยผ่านชื่อของพารามิเตอร์ตามด้วยค่าที่ส่งผ่าน ตัวอย่างเช่น:
void sum({int num1, int num2});
ฟังก์ชั่นนี้เรียกว่า:
sum(num1: 12, num2: 24);
พารามิเตอร์ที่มีชื่อนอกจากนี้ยังสามารถมีค่าเริ่มต้น