Apakah Anda sering menggunakan null? Dan kami memilikinya dalam spesifikasi

Saat ini, kelemahan menggunakan null sebagai tipe kembalian atau meneruskannya sebagai argumen telah menjadi jelas bagi sebagian besar developer.





Pengembang muda, meskipun mereka tidak mengerti, biasanya mengikuti "kode bersih" (setelah membaca buku oleh Robert Martin). Oleh karena itu, kode dengan kemungkinan terjadinya NPE menjadi kurang umum, meskipun, tentu saja, memang demikian.





Saya tidak ingin mengatakan bahwa penggunaan nol itu buruk, tetapi Anda dapat mengatakan "ukur tujuh kali, potong sekali".





Namun, saya tidak pernah mengeluh tentang NPE untuk waktu yang lama, bahkan ketika pengembang dari bahasa dengan kontrol ketat pada topik ini membual tentang keamanan nol mereka. Tetapi karena satu bug, saya menyadari bahwa hanya menggunakan null tidak terlalu buruk, bahkan jika Anda mengembalikan atau meneruskannya. Tentu saja, ini sangat buruk, tetapi ada hal-hal yang lebih buruk - nol dalam spesifikasi.





Tidak akan terlalu menarik jika ceritanya tentang satu perusahaan yang membuat spesifikasi yang buruk. Mari kita bicara tentang spesifikasi yang lebih terkenal dari Java EE - Spesifikasi Servlet Java , secara khusus mengambil kelas HttpServletRequest dan melihat ke dalam metodegetCookies()







getCookies





Cookie[] getCookies()
      
      



Mengembalikan larik yang berisi semua Cookie



objek yang dikirim klien dengan permintaan ini. Metode ini kembali null



jika tidak ada cookie yang dikirim.





  • Pengembalian:





    an array of all the Cookies



    included with this request, or null



    if the request has no cookies





:





This method returns null



if no cookies were sent.





, , null. :





  • , , -, , .





null



, , . ? , ?





null vs empty array

null



, , :





  • API, null-check





  • - , getCookies() null .





  • . , null



    ( )





, , . null , , ( ).





, .





  • -, , . , , , .





  • -, (, - )





, null





for (Cookie cookie : httpServletRequest.getCookies()) { 
  // NPE!    // …
}
      
      



int cookiesSize = httpServletRequest.getCookies().length    // NPE!
      
      



null-check:





if (httpServletRequest.getCookies() != null)
for (Cookie cookie : httpServletRequest.getCookies()) {    
  // …
}
      
      



Cookie[] cookies = httpServletRequest.getCookies();
int cookiesSize = cookies == null ? 0 : cookies.length
      
      



, , NPE . , .





API, . Jetty





, , .





,





:





return cookies == null?null:cookies.getCookies();
      
      



:





if (cookies == null || cookies.getCookies().length == 0)    
	return null;
return _cookies.getCookies();
      
      



, .





, , . null



, , null



. , .





!

, , , . , ? , ?





, classpathx





The GNU Classpath Extensions project, aka classpathx builds free versions of Oracle's Java extension libraries, the packages in the javax



namespace. It is a companion project of the GNU Classpath project.





" "





Cookie[] getCookies()
      
      



Gets all the Cookies present in the request.





  • Returns:





    an array containing all the Cookies or an empty array if there are no cookies





  • Since:





    2.0





. null



. , Sonar, SEI CERT Oracle Coding Standart for Java





. , , , .





.





- , null . , , , , . , .





, , , . null , .





- ( ):





  • - ,









  • . - , , .





, , .






Speaking at a software conference in 2009, Tony Hoare apologized for inventing the null reference:[25]





Saya menyebutnya kesalahan miliaran dolar saya. Itu adalah penemuan referensi nol pada tahun 1965. Saat itu, saya sedang merancang sistem tipe komprehensif pertama untuk referensi dalam bahasa berorientasi objek ( ALGOL W ). Tujuan saya adalah untuk memastikan bahwa semua penggunaan referensi harus benar-benar aman, dengan pemeriksaan yang dilakukan secara otomatis oleh kompilator. Tetapi saya tidak dapat menahan godaan untuk memasukkan referensi nol, hanya karena itu sangat mudah untuk diterapkan. Hal ini telah menyebabkan kesalahan, kerentanan, dan kerusakan sistem yang tak terhitung banyaknya, yang mungkin menyebabkan sakit dan kerusakan bernilai miliaran dolar dalam empat puluh tahun terakhir.








All Articles