هایی رو میبینم که روش های clean code نویسی رو میخواستن توضیح بدن اما اومدن روش های مخفف نویسی کد رو توضیح دادند. اگر به موضوع اینطور نگاه کنیم، خیلی ها از clean code فرار میکنند.چون مخفف نویسی گاهی اوقات باعث میشه، ساده نویسی از بین بره و فهم کد سخت تر بشه.
در این مقاله به چند نکته مهم اشاره شده که امیدوارم براتون مفید بوده باشه.
استفاده از عبارات معنادار
در مثال زیر نام کاربر جاری را میخواهیم برابر { مهدی } قرار دهیم.
//bad code
let str="mahdi";
//good code
let currentUser_FirstName="mahdi";
یا حتی در حلقه ها نیز میتوان از این ایده استفاده کرد.
//bad code
for(let item1 of arr1){
for(let item2 of arr2){
}
}
//good code
for(let eachUser of users){
for(let eachBook of eachUser.books){
}
}
استفاده از try catch
استفاده از try catch باعث میشود تا برنامه چنانچه اگر برنامه با خطایی برخورد کرد، هنگ نکند، بسته نشود و هشداری به کاربر ارسال شود تا کاربر نرم افزار نسبت به رفع این خطا اقدام نماید.
اهمیت این کار برای برنامه های تحت وب و برنامه هایی که چندین کاربر از آنها استفاده میکنند دوچندان است.زیرا اگر برنامه به خطایی برخورد کند و این خطا را نتوانیم مدیریتش کنیم و به کاربر نشان دهیم، برنامه بسته شده در نتیجه هیچ کاربری نمیتواند از برنامه استفاده کند.
try{
// main stream
}
catch(err){
// handle error
}
استفاده از optional chainings
برای اینکه آبجکت های تو در تو را چک کنیم تا بفهمیم چه مقداری دارند، قدیم ها بایستی این کار را انجام میدادیم.
if(data && data.fullname && data.fullname.first == "ali"){
}
if(data?.fullname.first == "ali"){
}
استفاده از تمپلیت استرینگ
این هم سینتکس جذابی است برای اینکه متغیر ها را با جملات ثابت، ترکیب کنید.
در این روش به جای استفاده از تک کوتیشتن ( ' ) از بک تیک ( ` ) استفاده میکنیم.
let str1= 'to';
//avoid this
let str= 'salam' + str1 + 'hame';
//do this
let str= `salam ${str1} hame`;
خودداری از تو در تو نوشتن کد
بهتر است در هنگام نوشتن یک شرط، بلاک آن طولانی نباشد. یا داخل یک بلاک، تابعی را تعریف نکنید (هرچند فقط در همان بلاک استفاده شده باشد) چون از کجا معلوم که در آینده به چنین تابعی نیاز نداشته باشید.ضمن اینکه اگر شخص دیگری در حال فهم کد شما باشد، از مسیر اصلی برنامه ی شما خارج شده و راه را ممکن است گم کند.
این را توجه داشته باشید که گاهی اوقات ساده نوشتن کد بهتر از این است که یک کد را بهینه بکنیم ولی در عین حال پیچیده هم بشود.
//not do this
if(cond1){
if(cond2){
}
}
//do this
if(cond1 && cond2){
}
مختصر سازی
قبلا اشاره کردیم که مختصر سازی گاهی اوقات باعث پیچیدگی میشه ولی این دلیل نمیشه ما کلا بزاریمش کنار.
مثلا برای مورد زیر ببینید چه اتفاق جالبی میتونه بیفته.اگر بخوایم بگیم یک متغیر نه خالی باشه ، نه نال باشه و نه آندیفایند باشه کدشو اینطوری مینویسیم.
if(str != "" && str != null && str != undefined){
}
در صورتی که به شکل زیر هم جواب میده:
if(!!str){
}
منابع:
https://blog.bitsrc.io/writing-clean-code-in-javascript-dd584bbe1874
https://dev.to/alexomeyer/8-must-know-tips-for-writing-clean-code-with-javascript-i4
https://github.com/ryanmcdermott/clean-code-javascript