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.
using
namespace tertentu dan kemudian tidak harus meletakkan awalan di awal pengidentifikasi di namespace itu.