Beberapa bahasa pemrograman (misalnya Java dan C ++) memiliki fitur bahasa yang disebut "paket" atau "ruang nama". Seberapa bermanfaatkah memiliki ruang nama? Dimungkinkan untuk menandai fungsi dan kelas sebagai milik beberapa perpustakaan tertentu tanpa menggunakan fitur bahasa seperti itu, seperti yang dilakukan SDL (misalnya SDL_BlitSurface()
). Apakah ruang nama tidak cukup bermanfaat untuk dimiliki? Apakah mereka berguna di perpustakaan tetapi tidak di aplikasi? Apakah mereka berguna di mana-mana kecuali untuk proyek-proyek kecil? Pikiran?
organization
naming
packages
compman
sumber
sumber
using
namespace tertentu dan kemudian tidak harus meletakkan awalan di awal pengidentifikasi di namespace itu.using
, olehimport xxxxxxxxx as yyy
, dll.using SDL;
atau harus mengetik diSDL_*
semua tempat?Sebagian besar (semua?) Bahasa dengan ruang nama cenderung berorientasi objek. Sering kali nama yang dapat dibaca manusia untuk suatu jenis pantas, meskipun ada beberapa implementasi yang tidak kompatibel. (ini memunculkan masalah lain pada penggunaan kembali berorientasi objek, tapi bukan itu pertanyaan ini tentang). Misalnya, di Jawa Anda memiliki Timer yang digunakan untuk tugas-tugas UI latar belakang, dan Timer yang digunakan untuk tugas-tugas aplikasi latar belakang (tidak terkait dengan AWT / Swing). Namespace memungkinkan Anda untuk memiliki objek dengan nama yang sama ini hidup di berbagai sub-API.
Alasan bahwa ruang nama muncul berkaitan dengan tugas yang tidak masuk akal untuk mengantisipasi apa yang pengembang lain akan beri nama objek mereka. C ++ memperkenalkan konsep (atau setidaknya adalah bahasa pertama yang saya kenal dengan konsep tersebut), dan itu sangat membantu meskipun tidak ada pedoman tentang praktik penggunaan terbaik. Java mengadaptasi konsep dan menambahkan beberapa "praktik terbaik" yang memasukkan nama perusahaan Anda di namespace. Dengan begitu Anda hanya perlu khawatir tentang perusahaan Anda sendiri.
Awalan bisa menjadi sangat berantakan. Kapan Anda menerapkannya? Kapan Anda tidak menerapkannya? Apakah struktur / kelas / metode global mendapatkan awalan? Bagaimana dengan metode? Bagaimana dengan properti di struct. Saya telah melihat semua ini dalam kode, meskipun untungnya tidak semuanya sekaligus. Namespaces menyediakan kemungkinan untuk semua pertanyaan ini, dan menjadikannya fitur bahasa daripada "praktik terbaik" pribadi.
sumber
Saya pikir ruang nama adalah ide bagus. Mereka membantu mencegah konflik penamaan dengan membatasi ruang lingkup nama. Dalam paket Java, konvensi penamaan paket yang disarankan didasarkan pada nama domain, yang harus unik, yang membantu mencegah konflik penamaan atas pustaka kustom. Secara keseluruhan, mereka membuat penamaan yang sedikit lebih unik dalam arti luas, sementara masih memberi programmer sedikit lebih banyak kebebasan dalam menamai karya-karyanya tanpa harus mengikuti beberapa konvensi penamaan yang tidak jelas.
sumber
Ruang nama / Modul / Paket berguna untuk menghindari konflik nama. Demikian juga awalan nama tetapi ruang nama memiliki kenyamanan tambahan untuk dapat mengimpor simbol ke namespace saat ini sehingga Anda tidak perlu repot dengan seluruh Namespace :: *.
Beberapa bahasa (seperti Python) memperluas kemampuan ini dengan memungkinkan Anda hanya mengimpor simbol tertentu ke modul Anda saat ini atau mengimpor simbol sebagai nama yang berbeda. Ini berguna jika Anda hanya tertarik pada beberapa kelas / fungsi / konstanta atau jika beberapa simbol bertentangan dengan simbol di namespace Anda tetapi beberapa tidak.
Beberapa bahasa (seperti Ruby) memungkinkan Anda untuk memasukkan metode modul ke dalam kelas Anda. Ini berguna untuk polimorfisme dan obat generik. Misalnya, jika Anda memiliki beberapa kelas yang memiliki iterator yang bertindak dengan cara yang sama, Anda bisa mencampur metode untuk semua kelas ini dari modul terpisah yang menyediakan metode untuk mengurutkan dan memfilter data dalam objek. Ini memungkinkan
has a
hubungan serta hubunganis a
(warisan).sumber