JavaRush /Java Blog /Random-ID /Mengembalikan array dengan panjang nol, bukan null
alexnjc
Level 31

Mengembalikan array dengan panjang nol, bukan null

Dipublikasikan di grup Random-ID
Seringkali ada metode yang terlihat seperti ini:
private List cheesesInStock =;
/**
* @return массив, содержащий все сыры, имеющиеся в магазине,
* or null, если сыров для продажи нет.
*/
public Cheese[] getCheeses() {
if (cheesesInStock.size() == 0)
return null;
}
Tidak ada alasan untuk menganggap situasi di mana tidak ada keju yang dijual sebagai kasus khusus. Hal ini mengharuskan klien untuk menulis kode tambahan untuk memproses nilai kembalian metode пull, misalnya:
Cheese[] cheeses = shop.getCheeses();
if (cheeses ! = пull &&
Аrrауs.аsList(shор.gеtСhееsеs()).соntаins(Сhееsе.SТILТON))
Sуstеm.оut.рrintln("Jоllу good, just the thing.");
bukannya sederhana:
if  (Аrrаys.аsList(shор.gеtСhееsеs()).соntаins(Сhееsе.SТILTON)) Sуstеm.оut.рrintln("Jоllу good, just the thing.");
Verbositas semacam ini diperlukan untuk hampir setiap pemanggilan metode yang mengembalikan null alih-alih array dengan panjang nol. Ini penuh dengan kesalahan, karena pengembang klien mungkin tidak menulis kode khusus untuk memproses hasilnya null. Kesalahan mungkin tidak terdeteksi selama bertahun-tahun karena metode tersebut biasanya mengembalikan satu atau lebih objek. Perlu juga disebutkan bahwa mengembalikan nullalih-alih array menyebabkan komplikasi dari metode itu sendiri yang mengembalikan array. Kadang-kadang dikatakan bahwa mengembalikan null lebih baik daripada mengembalikan array dengan panjang nol karena menghindari biaya pengalokasian array di memori. Argumen ini gagal karena dua alasan. Pertama, tidak ada gunanya mengkhawatirkan kinerja pada tingkat ini kecuali pembuatan profil program menunjukkan bahwa metode khusus ini adalah alasan utama penurunan kinerja. Kedua, setiap panggilan ke metode yang tidak mengembalikan catatan dapat meneruskan array dengan panjang nol yang sama ke klien, karena array dengan panjang nol apa pun tidak dapat diubah, dan objek yang tidak dapat diubah dapat dibagikan. Faktanya, inilah yang terjadi ketika Anda menggunakan idiom standar untuk membuang elemen dari koleksi ke dalam array yang dikontrol tipenya:
private List сhееsеsInStосk =,
private fiпаl static Cheese[] NULL_CHEESE_ARRAY = nеw Cheese[0];
 /**
* @геtuгп массие, содержащий все сыры, имеющиеся в магазине
*/
public Cheese[] getCheeses() {
геtuгп (Cheese[] сhееsеsInStосk.tоАггау(NULL_СНЕЕSЕ_АRRАУ);
}
Dalam idiom ini, sebuah konstanta, sebagai array dengan panjang nol ,toArray diteruskan ke suatu metode untuk menunjukkan tipe apa yang harus dikembalikan. Biasanya, metode ini toArraymengalokasikan ruang memori untuk larik yang dikembalikan, tetapi jika koleksinya kosong, maka akan ditempatkan di larik masukan, dan spesifikasi Сollесtion,tоАггау(Оbjесt[])memastikan bahwa jika larik masukan cukup besar untuk menampung koleksi, itulah yang dikembalikan. Oleh karena itu, idiom yang disajikan tidak akan pernah mengalokasikan array dengan panjang nol ke dalam memori, tetapi menggunakan “konstanta tipe spesifik” seperti itu. Mari kita rangkum. Tidak ada alasan bagi metode array untuk mengembalikan null daripada array dengan panjang nol. Ungkapan ini tampaknya berasal dari bahasa pemrograman C, di mana panjang array dikembalikan secara terpisah dari array itu sendiri. Di C, tidak ada gunanya mengalokasikan memori untuk array dengan panjang nol. Sumber: Joshua Bloch, Pemrograman Efektif Java TM, Lori Publishing House
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION