ฉันไม่ชอบฟังก์ชั่น "การอ้างอิงโดยอ้างอิง" ที่เสนอโดยภาษาการเขียนโปรแกรมที่หลากหลาย อาจเป็นเพราะฉันเพิ่งค้นพบแนวคิดของฟังก์ชันการเขียนโปรแกรม แต่ฉันมักจะได้รับห่านเมื่อฉันเห็นฟังก์ชั่นที่ทำให้เกิดผลข้างเคียง (เช่นการจัดการพารามิเตอร์ที่ส่งผ่านโดยการอ้างอิง) โดยส่วนตัวแล้วฉันยอมรับอย่างมากว่าหลักการ
IMHO ฟังก์ชันควรส่งคืนผลลัพธ์ / ค่าเดียวโดยใช้คีย์เวิร์ด return แทนที่จะแก้ไขพารามิเตอร์ / อาร์กิวเมนต์ฉันจะคืนค่าพารามิเตอร์ / อาร์กิวเมนต์ที่แก้ไขแล้วและปล่อยให้การกำหนดใหม่ที่ต้องการถึงรหัสการโทร
แต่บางครั้ง (หวังมากไม่ค่อย) มีความจำเป็นต้องคืนค่าผลลัพธ์สองค่าขึ้นไปจากฟังก์ชันเดียวกัน ในกรณีนั้นฉันจะเลือกที่จะรวมค่าผลลัพธ์ทั้งหมดในโครงสร้างหรือวัตถุเดียว อีกครั้งการประมวลผลการมอบหมายใหม่ควรขึ้นอยู่กับรหัสการโทร
ตัวอย่าง:
สมมติว่าพารามิเตอร์การส่งผ่านจะได้รับการสนับสนุนโดยใช้คำหลักพิเศษเช่น 'ref' ในรายการอาร์กิวเมนต์ รหัสของฉันอาจมีลักษณะเช่นนี้:
//The Function
function doSomething(ref value) {
value = "Bar";
}
//The Calling Code
var value = "Foo";
doSomething(value);
console.log(value); //Bar
ฉันอยากทำสิ่งนี้มากกว่า:
//The Function
function doSomething(value) {
value = "Bar";
return value;
}
//The Calling Code:
var value = "Foo";
value = doSomething(value); //Reassignment
console.log(value); //Bar
เมื่อฉันต้องการเขียนฟังก์ชันที่คืนค่าหลายค่าฉันจะไม่ใช้พารามิเตอร์ที่ส่งผ่านโดยการอ้างอิง ดังนั้นฉันจะหลีกเลี่ยงรหัสเช่นนี้
//The Function
function doSomething(ref value) {
value = "Bar";
//Do other work
var otherValue = "Something else";
return otherValue;
}
//The Calling Code
var value = "Foo";
var otherValue = doSomething(value);
console.log(value); //Bar
console.log(otherValue); //Something else
แต่ฉันอยากกลับทั้งสองค่าใหม่ภายในวัตถุเช่นนี้
//The Function
function doSomething(value) {
value = "Bar";
//Do more work
var otherValue = "Something else";
return {
value: value,
otherValue: otherValue
};
}
//The Calling Code:
var value = "Foo";
var result = doSomething(value);
value = result.value; //Reassignment
console.log(value); //Bar
console.log(result.otherValue);
ตัวอย่างโค้ดเหล่านี้ค่อนข้างง่าย แต่มันแสดงให้เห็นอย่างคร่าวๆว่าฉันจะจัดการกับสิ่งเหล่านั้นอย่างไร มันช่วยให้ฉันรักษาความรับผิดชอบต่าง ๆ ในตำแหน่งที่ถูกต้อง
การเข้ารหัสที่มีความสุข :)