Saya pribadi tidak menyukai fungsi "pass by reference" yang ditawarkan oleh berbagai bahasa pemrograman. Mungkin itu karena saya hanya menemukan konsep pemrograman fungsional, tetapi saya selalu merinding ketika saya melihat fungsi yang menyebabkan efek samping (seperti memanipulasi parameter yang dilewatkan oleh referensi). Saya pribadi sangat menganut prinsip "tanggung jawab tunggal".
IMHO, suatu fungsi harus mengembalikan hanya satu hasil / nilai menggunakan kata kunci kembali. Alih-alih memodifikasi parameter / argumen, saya hanya akan mengembalikan nilai parameter / argumen yang dimodifikasi dan membiarkan penugasan kembali yang diinginkan ke kode panggilan.
Tapi kadang-kadang (mudah-mudahan sangat jarang), perlu mengembalikan dua atau lebih nilai hasil dari fungsi yang sama. Dalam hal ini, saya akan memilih untuk memasukkan semua nilai yang dihasilkan dalam struktur atau objek tunggal. Sekali lagi, memproses setiap penugasan kembali harus sesuai dengan kode panggilan.
Contoh:
Misalkan parameter lewat akan didukung dengan menggunakan kata kunci khusus seperti 'ref' dalam daftar argumen. Kode saya mungkin terlihat seperti ini:
//The Function
function doSomething(ref value) {
value = "Bar";
}
//The Calling Code
var value = "Foo";
doSomething(value);
console.log(value); //Bar
Sebaliknya, saya sebenarnya lebih suka melakukan sesuatu seperti ini:
//The Function
function doSomething(value) {
value = "Bar";
return value;
}
//The Calling Code:
var value = "Foo";
value = doSomething(value); //Reassignment
console.log(value); //Bar
Ketika saya perlu menulis fungsi yang mengembalikan beberapa nilai, saya juga tidak akan menggunakan parameter yang dilewati oleh referensi. Jadi saya akan menghindari kode seperti ini:
//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
Sebaliknya, saya sebenarnya lebih suka mengembalikan kedua nilai baru di dalam objek, seperti ini:
//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);
Contoh kode ini cukup disederhanakan, tetapi secara kasar menunjukkan bagaimana saya secara pribadi akan menangani hal-hal seperti itu. Ini membantu saya untuk menjaga berbagai tanggung jawab di tempat yang benar.
Selamat coding. :)