Kadang-kadang, nama yang paling logis untuk sesuatu (misalnya variabel) adalah kata kunci yang dipesan dalam bahasa atau lingkungan pilihan. Ketika tidak ada sinonim yang sama sesuai, bagaimana satu nama itu?
Saya membayangkan ada heuristik praktik terbaik untuk masalah ini. Ini dapat disediakan oleh pencipta atau gubernur bahasa dan lingkungan pemrograman. Misalnya, jika python.org (atau Guido van Rossum) mengatakan bagaimana menghadapinya dengan Python, itu akan menjadi pedoman yang baik dalam buku saya. Tautan MSDN tentang cara menghadapinya dalam C # akan lebih baik juga.
Atau, pedoman yang diberikan oleh influencer utama dalam rekayasa perangkat lunak juga harus berharga. Mungkin Google / Alphabet memiliki panduan gaya yang bagus yang mengajarkan kita bagaimana menghadapinya?
Berikut ini hanya sebuah contoh: dalam bahasa C #, "default" adalah kata kunci yang dipesan. Ketika saya menggunakan enum, saya mungkin ingin memberi nama nilai default "default" (analog dengan pernyataan "switch"), tetapi tidak bisa.
(C # peka huruf besar kecil, dan konstanta enum harus dikapitalisasi, jadi "Default" adalah pilihan yang jelas di sini, tapi mari kita asumsikan panduan gaya kita saat ini menentukan semua konstanta enum harus huruf kecil.)
Kita dapat mempertimbangkan kata "defaultus ", tapi ini tidak mematuhi Prinsip Terkecilnya Kekaguman . Kita juga harus mempertimbangkan "standar" dan "awal", tetapi sayangnya "default" adalah kata yang secara tepat menyampaikan tujuannya dalam situasi ini.
clazz
praktis merupakan standar de-facto. Ini pada dasarnya adalah bagian dari konvensi penamaan platform. Melakukan hal lain akan melanggar harapan bahwa orang lain mungkin membaca kode Anda, jadi hanya boleh dilakukan jika benar-benar diperlukan.Jawaban:
Untuk opsi enum, Anda harus menggunakan case title like
Default
. Karena C # peka huruf besar-kecil, ia tidak akan bertabrakan dengan kata kunci yang dipesan. Lihat . Panduan Penamaan Net .Karena semua anggota publik harus menjadi judul huruf dalam .net, dan semua nama yang dipesan adalah huruf kecil, Anda seharusnya tidak benar-benar menemukan ini kecuali dengan variabel lokal (termasuk parameter). Dan penduduk setempat biasanya memiliki kata benda atau frasa sebagai nama, sehingga sangat jarang nama yang paling alami akan bertabrakan dengan kata kunci. Misalnya.
defaultValue
biasanya akan menjadi nama yang lebih alami daripadadefault
. Jadi dalam praktiknya ini bukan masalah besar.Di C # Anda dapat menggunakan
@
awalan " " untuk keluar dari kata kunci yang dilindungi sehingga mereka dapat digunakan sebagai pengidentifikasi (seperti@default
). Tapi ini hanya boleh digunakan jika Anda benar-benar tidak memiliki pilihan lain, yaitu jika Anda berinteraksi dengan perpustakaan pihak ketiga yang menggunakan kata kunci yang dipesan sebagai pengenal.Tentu saja bahasa lain memiliki sintaks dan kata kunci yang berbeda dan karena itu solusi yang berbeda masalah ini.
SQL memiliki cukup banyak kata kunci, tetapi sangat umum untuk melarikan diri dari pengidentifikasi, seperti
[Table]
. Beberapa bahkan melakukannya untuk semua pengidentifikasi, terlepas dari apakah mereka berbenturan dengan kata kunci atau tidak. (Lagi pula, kata kunci yang berbenturan dapat diperkenalkan di masa depan!)Powershell (dan banyak bahasa scripting lainnya) mengawali semua variabel dengan sigil seperti $ yang berarti mereka tidak akan pernah bertabrakan dengan kata kunci.
Lisp tidak memiliki kata kunci sama sekali, setidaknya tidak dalam arti konvensional.
Python memiliki konvensi yang diakui secara resmi di PEP-8 :
Beberapa bahasa seperti Brainfuck atau Whitespace sama sekali tidak mendefinisikan kata-kata, menghindari masalah secara elegan.
Singkatnya tidak ada jawaban bebas bahasa untuk pertanyaan Anda, karena sangat tergantung pada sintaksis dan konvensi bahasa tertentu.
sumber
#define
, tetapi operan tangan kanan akan selalu ditafsirkan sebagai pengidentifikasi case-sensitive. Itu akan memungkinkan banyak jenis konflik penamaan untuk diselesaikan (termasuk, untuk bahasa yang tidak peka terhadap kasus, impor simbol yang identik kecuali untuk kasus).Saya akan menambahkan garis bawah (default_)
Pro:
Mengapa saya tidak suka solusi lain:
Persamaan Kata:
Menambahkan / menambahkan kata:
Mengubah huruf (klik bukan kelas):
Menambahkan nomor (default1):
Menambahkan / Membubuhkan surat:
Melarikan Kata Kunci (@default (c #), `default` (scala))
Kapan saya tidak menggunakannya:
sumber
klass
untuk variabel manaclass
kata yang disediakan. Saya belum pernah melihatdefawlt
tapi itu ide yang sama. Saya lebih sukadefault_
(dan mungkinclass_
jika tidak menginjak-injak konvensi yang sudah mapan dengan melakukan hal itu)."Default" mungkin bukan nilai enum yang bermanfaat. Ini mewakili perilaku yang dapat berubah tergantung pada konteks di mana ia digunakan.
Karena itu, jika bahasa Anda peka terhadap huruf besar-kecil, maka gunakan huruf besar untuk kata tersebut. (Default vs default)
Atau lebih baik lagi, buat upaya ekstra untuk mengetik beberapa huruf lagi dan menyebutnya DefaultValue.
sumber
enum ErrorHandlingLevel { Default = 0, ... }
vsenum ErrorHandlingLevel { None = 0, ... }
. Dalam contoh kedua, fakta bahwaNone
default dapat diketahui dengan menetapkan nilai enum ke 0, menggunakan xmldoc, atau secara eksplisit dalam kode. Anda mendapatkan manfaat tambahan dari mengetahui apa artinya ketika suatu objekErrorHandlingLevel
diaturNone
. Bandingkan dengan memeriksa objek denganErrorHandlingLevel
set ke default.Saya akan sangat menyarankan TIDAK mengubah konvensi penamaan secara lokal (atau menambahkan karakter yang tidak berarti) untuk tujuan disambiguasi (seperti yang telah disarankan dalam posting lain). Ini menciptakan kebingungan jika niat tidak jelas dan dapat menimbulkan pertanyaan mengapa itu dinamai demikian. Itu bisa diselesaikan tanpa itu.
Dalam setiap kasus harus dimungkinkan untuk menggunakan kata dengan makna sinonim atau membuat nama lebih spesifik (atau bahkan bertele-tele). Bahkan ketika itu dapat memperkenalkan pengulangan konteks itu mungkin merupakan solusi yang lebih baik.
Misalnya, katakanlah Anda memiliki enum
Mode
yang harus mengekspos nilai default seperti dalam kasus Anda. Memberi nama itudefault_mode
mungkin bukan yang terbaik karena pengulangan, tetapi menghindari ambiguitas sambil menyampaikan makna yang diinginkan.sumber
Anda harus menggunakan kata yang berbeda atau dimodifikasi, yang jelas.
Jadi ini biasanya berarti baik
Faktor lain untuk menentukan adalah bagaimana cara menggabungkan beberapa kata dan opsi biasanya
Saran saya adalah menggunakan awalan atau akhiran dan garis bawah / garis, misalnya
local_default
memiliki keuntungan bahwa semua penduduk setempat disejajarkan dan dengan demikian menonjol dengan cepat tetapi kerugiannya adalah Anda harus selalu membaca bagian kedua untuk mendapatkan nama yang unik.default_local
memiliki keunggulan sebaliknya bahwa nama variabel yang unik dengan cepat terlihat, tetapi penduduk setempat tidak selalu begitu mudah dikelompokkan secara visual.Beberapa contoh untuk pendekatan domain_specific yang telah saya lihat adalah:
vehicle_model
alih-alihmodel
merupakan kata khusus;room_table
untuk tabel SQL sepertitable
kata yang disediakan.Dua opsi lain yang saya lihat menggunakan bahasa atau skrip adalah:
sumber
words_with_underscores-or-dashes
disebut dengan dua nama -snake_case
saat menggunakan garis bawah dankebab-case
saat menggunakan tanda hubung. Saya menemukan yang terakhir lucu.Jelas, lakukan apa yang Anda bisa untuk menghindari situasi itu. Saya telah menulis perangkat lunak sejak akhir 1970-an dan saat-saat saya benar-benar harus memalsukan kata yang dilindungi undang-undang adalah di bawah sepuluh, mungkin mendekati lima.
Ada banyak hal yang dapat Anda lakukan, seperti menggandakan huruf pertama atau terakhir (
reservedd
) atau menambahkan garis bawah yang memimpin atau tertinggal (reserved_
). Apa yang sesuai akan sangat tergantung pada konvensi bahasa yang Anda gunakan, terutama yang berkaitan dengan memimpin atau mengikuti garis bawah. Juga cobalah untuk tidak melakukan hal-hal dengan kasus yang dapat salah dibaca oleh manusia (misalnya, menggunakanReserved
ketika berbeda darireserved
).Setelah Anda memilih sesuatu, taruh di pedoman koding Anda, pastikan orang tahu tentang hal itu dan itu digunakan secara konsisten. Saya bahkan menambahkan komentar pengingat sehingga pembaca tidak berpikir itu salah ketik dan tahu mereka akan melihatnya lagi:
sumber
classs
?)Di C #, Anda bisa menambahkan nama pengidentifikasi dengan @ . Ini memberitahu kompiler untuk memperlakukan nama sebagai nama pengidentifikasi dan bukan sebagai kata kunci yang mungkin.
sumber