Apakah ini praktik yang baik untuk membuat variabel baru untuk melihat output dari suatu fungsi?

8

Pertimbangkan 2 jenis implementasi ini:

public int add(int x, int y) {
    return mysteriousAdd(x, y);
}


public int add(int x, int y) {
    int output = mysteriousAdd(x, y);
    return output;
}

Seorang kolega saya mengatakan bahwa implementasi kedua lebih baik karena selama debugging kita bisa melihat variabel yang mysteriousAddkembali dan itu tidak banyak overhead untuk membuat variabel tambahan di stack. Saya pikir implementasi pertama lebih baik dan maksudnya tidak begitu valid karena saat ini sebagian besar kompiler dapat menunjukkan apa respon fungsi selama debugging tanpa variabel tambahan dan kami juga menghindari pembuatan variabel tambahan di stack.

Apakah pembuatan variabel referensi dalam stack merupakan operasi yang murah? Manakah dari 2 metode di atas yang Anda sarankan lebih baik untuk pengkodean dan mengapa?

kai
sumber
2
Pertanyaan serupa untuk C #: softwareengineering.stackexchange.com/questions/141711/… , hampir merupakan duplikat.
Doc Brown

Jawaban:

16

Jika Anda membandingkan output assembly / bytecode / IL / etc dari dua fungsi seperti itu, Anda harus menemukan keduanya sama. Semua kecuali compiler bush-liga paling akan mengoptimalkan nilai tambahan.

Jadi pertimbangan kinerja / memori harus dibuang.

Jadi, tentukan pilihan Anda tentang keterbacaan. Dalam contoh, benar-benar tidak ada nilai untuk mengidentifikasi nilai kembali sebelum kembali. Namun, jika Anda berada di bagian bawah perhitungan 20 baris atau sesuatu, sering kali layak untuk membuat nilai yang disebutkan sebelum kembali, karena nama itu dapat menunjukkan kepada pembaca informasi tentang hasil perhitungan yang seharusnya.

Apa namanya
sumber
4
Saya sering membuat variabel yang benar-benar tidak perlu, karena itu mungkin untuk menetapkan breakpoint dan memeriksa nilai yang akan dikembalikan.
Simon B
3
@SimonB, pendekatan lain untuk menghindari "variabel debug" adalah menulis tes. Tes akan menghapus 90% dari waktu debugging.
Fabio
@ Fabio, kecuali tentu saja ketika tes Anda gagal dan Anda perlu men-debug dan kemudian Anda keluar variabel sehingga Anda dapat menetapkan titik istirahat: D
Hangman4358
1
@ Hangman4358 benar dalam 10% dari waktu :) Tapi dalam tes Anda akan selalu memiliki konsumen yang akan menegaskan hasil output, jadi saya akan selalu menangkap nilai yang dikembalikan pada tingkat tes. Dan jika Anda memiliki tes khusus maka Anda akan tahu apa alasan kegagalan tes;)
Fabio
Jika saya memiliki lokal saya (hampir) selalu kembali (karena tidak memilikinya akan lebih kompleks), saya biasanya menyebutnya result(mungkin disingkat). Nama itu benar-benar mengatakan itu semua.
Deduplicator
1

Tunjukkan di lingkungan pemrograman Anda bahwa Anda dapat membaca hasil pemanggilan fungsi tanpa variabel semudah tanpa variabel sementara. Saya menggunakan apa yang saya pikir merupakan lingkungan pengkodean yang cukup baik, dan saya tidak bisa.

Jadi tunjukkan. Jika Anda bisa, kolega Anda telah mempelajari sesuatu. Jika tidak bisa, Anda belajar sesuatu.

gnasher729
sumber