Dasturlash uslubi - Programming style

Dasturlash uslubi, shuningdek, nomi bilan tanilgan kod uslubi, bu yozishda ishlatiladigan qoidalar yoki ko'rsatmalar to'plamidir manba kodi a kompyuter dasturi. Odatda ma'lum bir dasturlash uslubiga rioya qilish yordam beradi, deb da'vo qilishadi dasturchilar uslubga mos keladigan manba kodini o'qing va tushunib oling va xatolarga yo'l qo'ymaslik uchun yordam bering.

Bu mavzu bo'yicha klassik ish edi Dasturlash uslubining elementlari, 1970-yillarda yozilgan va .dan misollar bilan tasvirlangan Fortran va PL / I o'sha paytda keng tarqalgan tillar.

Muayyan dasturda ishlatiladigan dasturlash uslubi kodlash bo'yicha konvensiyalar kompaniya yoki boshqa hisoblash tashkilotlari, shuningdek kod muallifining afzalliklari. Dasturlash uslublari ko'pincha ma'lum bir narsaga mo'ljallangan dasturlash tili (yoki til oilasi): yaxshi deb hisoblangan uslub C manba kodi mos kelmasligi mumkin ASOSIY manba kodi va boshqalar. Ammo ba'zi qoidalar odatda ko'plab tillarda qo'llaniladi.

Yaxshi uslubning elementlari

Yaxshi uslub sub'ektiv masaladir va uni aniqlash qiyin. Biroq, ko'plab dasturlash uslublari uchun umumiy bo'lgan bir nechta elementlar mavjud. Odatda dasturlash uslubining bir qismi sifatida ko'rib chiqiladigan masalalarga quyidagilar kiradi maket manba kodining, shu jumladan chuqurlik; foydalanish oq bo'shliq operatorlar va kalit so'zlar atrofida; kalit so'zlar va o'zgaruvchan nomlarning bosh harflari yoki boshqacha tarzda yozilishi; funktsiya, protsedura va o'zgaruvchilar nomlari kabi foydalanuvchi tomonidan aniqlangan identifikatorlarning uslubi va imlosi; ning ishlatilishi va uslubi Izohlar.

Kod ko'rinishi

Dasturlash uslublari odatda manba kodining ingl. Ko'rinishi bilan shug'ullanadi. Dastlabki dastur manba kodini avtomatik ravishda formatlaydigan dasturchilar mavjud bo'lib, ular kodlashda nomlash, mantiq va yuqori uslublarga e'tibor berishadi. Amaliy nuqta sifatida, kompyuterdan manba kodini formatlashda foydalanish vaqtni tejaydi va shundan so'ng kompaniya miqyosidagi standartlarni amalga oshirish mumkin. munozaralar.

Chiziq

Burilish uslublari kod oqimi va bloklarini aniqlashda yordam berish. Ba'zi dasturlash tillarida indentatsiya kodning mantiqiy bloklarini chegaralash uchun ishlatiladi; bu holatlarda to'g'ri chizish uslub masalasidan ko'proq. Boshqa tillarda chuqurlik va oq bo'shliq funktsiyaga ta'sir qilmaydi, garchi mantiqiy va izchil indentatsiya kodni ko'proq o'qiydi. Taqqoslang:

agar (soat < 24 && daqiqa < 60 && soniya < 60) {    qaytish to'g'ri;} boshqa {    qaytish yolg'on;}

yoki

agar (soat < 24 && daqiqa < 60 && soniya < 60){    qaytish to'g'ri;}boshqa{    qaytish yolg'on;}

shunga o'xshash narsa bilan

agar  ( soat   < 24   && daqiqa < 60   && soniya < 60){qaytish    to'g'ri;}         boshqa{qaytish   yolg'on;}

Dastlabki ikkita misolni o'qish ancha osonroq bo'lishi mumkin, chunki ular belgilangan shaklda ("osilgan abzats" uslubi) bilan o'yilgan. Ushbu kirish uslubi, ayniqsa, bir nechta ichki tuzilmalar bilan ishlashda foydalidir.

ModuLiq

ModuLiq nolinchi indentatsiya uslubi guruhlari vagon qaytadi chuqurliklar o'rniga Yuqoridagilarning barchasini solishtiring:

agar (soat < 24 && daqiqa < 60 && soniya < 60)qaytish to'g'ri;boshqaqaytish yolg'on;

Lua

Lua an'anaviy foydalanmaydi jingalak qavslar yoki qavs. if / else iboralari faqat iborani ta'qib qilishni talab qiladi keyinva if / else ifodasini yoping oxiri.

agar soat < 24 va daqiqa < 60 va soniya < 60 keyin  qaytish to'g'riboshqa  qaytish yolg'onoxiri

Burilish majburiy emas. va, yoki, emas true / false bayonotlari orasida ishlatiladi.

Ular to'g'ri / yolg'on bayonotlardir

chop etish(emas to'g'ri)

yolg'on degani.

Python

Python boshqaruv tuzilmalarini ko'rsatish uchun chuqurlikdan foydalanadi, shuning uchun to'g'ri chiziq zarur. Buni amalga oshirib, braxetlash kerak jingalak qavslar (ya'ni { va }) yo'q qilindi. Boshqa tomondan, Python kodini nusxalash va joylashtirish muammolarga olib kelishi mumkin, chunki joylashtirilgan kodning indentatsiya darajasi joriy satrning indentatsiya darajasi bilan bir xil bo'lmasligi mumkin. Bunday qayta formatlashni qo'lda bajarish zerikarli bo'lishi mumkin, ammo ba'zilari matn muharrirlari va IDElar uni avtomatik ravishda bajarish uchun xususiyatlarga ega. Forumda yoki bo'sh joyni olib tashlaydigan veb-sahifada joylashtirilayotganda Python kodini yaroqsiz holga keltirishda muammolar mavjud, ammo "

 .." kabi bo'sh joyni saqlaydigan teglarga kodni kiritish mumkin bo'lgan joyda bu muammoni oldini olish mumkin. . 
"(uchun HTML ), "[code]" ... "[/ code]" (uchun bbcode ), va boshqalar.

agar soat < 24 va daqiqa < 60 va soniya < 60:    qaytish To'g'riboshqa:    qaytish Yolg'on

E'tibor bering, Python jingalak qavslardan emas, balki oddiy yo'g'on ichakdan foydalanadi (masalan. boshqa:).

Ko'pgina Python dasturchilari PEP8 deb nomlanuvchi umumiy kelishilgan uslublar qo'llanmasiga amal qilishadi.[1] PEP8 muvofiqligini avtomatlashtirish uchun mo'ljallangan vositalar mavjud.

Xaskell

Xaskell xuddi shunday tashqi qoidalar ya'ni ikki qatorli sintaksisga ega, bu erda blokirovkalarni aniqlash uchun indententsiya muhim ahamiyatga ega (garchi alternativ sintaksis jingalak qavs va nuqta-verguldan foydalangan bo'lsa ham) .Haskell deklarativ tildir, ammo bayonotlar mavjud, ammo Haskell skriptidagi deklaratsiyalar. Misol:

ruxsat bering c_1 = 1    c_2 = 2yilda    f x y = c_1 * x + c_2 * y

bitta satrda quyidagicha yozilishi mumkin:

ruxsat bering {c_1=1;c_2=2} yilda f x y = c_1 * x + c_2 * y

Haskell foydalanishni rag'batlantiradi savodli dasturlash, bu erda kengaytirilgan matn kodning genezisini tushuntiradi. Savodli Haskell skriptlarida (nomi bilan nomlangan lhs kengaytma), hamma narsa kod sifatida belgilangan bloklardan tashqari izohdir, dastur yozilishi mumkin LaTeX, bunday holatda kod muhit kod nima ekanligini belgilaydi. Shuningdek, har bir faol kod abzatsi oldin va uni bo'sh satr bilan tugatish va har bir satr satridan kattaroq belgi va bo'sh joy bilan boshlash bilan belgilanishi mumkin, bu erda LaTeX markirovkasi yordamida misol:

The funktsiya \fe'l+isValidDate+ sinov agar sana bu yaroqli\boshlash{kod}isValidDate :: Sana -> BoolisValidDate sana = hh>=0  && mm>=0 && ss>=0                 && hh<24 && mm<60 && ss<60 qayerda (hh,mm,ss) = sanadan sana\oxiri{kod}kuzatmoq bu yilda bu ish The haddan tashqari yuklangan funktsiya bu \fe'l+sanadan :: Sana -> (Int,Int,Int)+.

Va oddiy matnni ishlatadigan misol:

The funktsiya isValidDate sinov agar sana bu yaroqli> isValidDate :: Sana -> Bool> isValidDate sana = hh>=0  && mm>=0 && ss>=0>                  && hh<24 && mm<60 && ss<60>  qayerda (hh,mm,ss) = sanadan sanakuzatmoq bu yilda bu ish The haddan tashqari yuklangan funktsiya bu sanadan :: Sana -> (Int,Int,Int).

Vertikal tekislash

Shunga o'xshash elementlarni vertikal ravishda tekislash, xatoning xatolarini yanada aniqroq qilish uchun ko'pincha foydalidir. Taqqoslang:

$ search = qator("a", "b", "c", "d", "e");$ almashtirish = qator("foo", "bar", "baz", "quux");// Yana bir misol:$ qiymati = 0;$ anothervalue = 1;$ yetanothervalue = 2;

bilan:

$ search      = qator("a",   "b",   "c",   "d",   "e");$ almashtirish = qator("foo", "bar", "baz", "quux");// Yana bir misol:$ qiymati           = 0;$ anothervalue    = 1;$ yetanothervalue = 2;

Oxirgi misol, avvalgisida aniq bo'lmagan ikkita narsani intuitiv ravishda aniq qiladi:

  • qidirish va almashtirish atamalari bir-biriga bog'liq va mos keladi: ular diskret o'zgaruvchilar emas;
  • almashtirish so'zlariga qaraganda yana bitta qidiruv atamasi mavjud. Agar bu xato bo'lsa, endi uni aniqlash ehtimoli ko'proq.

Biroq, argumentlar mavjudligiga e'tibor bering qarshi vertikal tekislash:

  • Chiziqlararo yolg'on bog'liqliklar; jadval formatlash chiziqlar bo'yicha bog'liqliklarni yaratadi. Masalan, jadval tartibiga uzun ismga ega identifikator qo'shilsa, uni joylashtirish uchun ustun kengligini oshirish kerak bo'lishi mumkin. Bu manba kodini zarur bo'lgandan ko'ra kattaroq o'zgartirishga majbur qiladi va muhim o'zgarish shovqinda yo'qolishi mumkin. Bu zararli Qayta ko'rib chiqishni boshqarish bu erda versiyalar o'rtasidagi farqlarni tekshirish juda muhimdir.
  • Mo'rtlik; agar dasturchi o'zgarishlarni amalga oshirayotganda jadvalni chiroyli tarzda formatlamasa, ehtimol avvalgi fikrni hisobga olgan holda qonuniy bo'lsa, natijada bunday o'zgarishlar bilan yomonlashadigan tartibsizlik bo'ladi. Qidiruv-almashtirish kabi oddiy qayta ishlash operatsiyalari ham formatlashni buzishi mumkin.
  • Modifikatsiyaga qarshilik; jadval formatlashni saqlash uchun ko'proq harakat talab etiladi. Bu dasturchini identifikator nomini qo'shish, tuzatish yoki takomillashtirish kabi foydali o'zgarishlarni to'xtatishi mumkin, chunki bu formatlashni buzadi.
  • Mono-intervalli shriftga tayanish; jadval formatlashi tahrirlovchining belgilangan kenglikdagi shriftdan foydalanishini taxmin qiladi. Ko'pgina zamonaviy kod muharrirlari mutanosib shriftlarni qo'llab-quvvatlaydi va dasturchi o'qish uchun mutanosib shriftdan foydalanishni afzal ko'rishi mumkin.
  • Asbobga bog'liqlik; moslashtirishni saqlashga qaratilgan ba'zi harakatlar vositalar yordamida yumshatilishi mumkin (masalan, a manba kodi muharriri qo'llab-quvvatlaydi elastik tabstoplar ), ammo bu bunday vositalarga ishonchni yaratadi.

Masalan, yuqoridagi kodda oddiy qayta ishlash jarayoni bajarilsa, o'zgaruvchilarning nomini "$ əvəz" "$ r" ga va "$ anothervalue" ni "$ a" ga o'zgartiring, natijada olingan kod quyidagicha ko'rinadi:

$ search      = qator("a",   "b",   "c",   "d",   "e");$ r = qator("foo", "bar", "baz", "quux");// Yana bir misol:$ qiymati           = 0;$ a    = 1;$ yetanothervalue = 2;

Bunday o'zgarishdan keyin asl ketma-ket formatlash hali ham yaxshi ko'rinadi:

$ search = qator("a", "b", "c", "d", "e");$ r = qator("foo", "bar", "baz", "quux");// Yana bir misol: $ qiymati = 0;$ a = 1;$ yetanothervalue = 2;

Bo'shliqlar

Bunday holatlarda ba'zi oq bo'shliq talab qilinadi, aksariyati grammatikasi erkin formatli tillar paydo bo'lgan miqdor bilan qiziqmaydi. Oq bo'shliqqa tegishli uslub odatda takomillashtirish uchun ishlatiladi o'qish qobiliyati. Hozirda bo'shliqning qaysi uslublari eng yaxshi o'qilishi mumkinligi to'g'risida aniq faktlar (tadqiqotlar natijalari) mavjud emas.

Masalan, C kodining quyidagi sintaktik teng keladigan misollarini taqqoslang:

int men;uchun(men=0;men<10;++men){    printf("% d",men*men+men);}

ga qarshi

int men;uchun (men = 0; men < 10; ++men) {    printf("% d", men * men + men);}

Yorliqlar

Dan foydalanish yorliqlar Oq bo'shliqni yaratish etarli darajada e'tibor berilmaganda alohida muammolarni keltirib chiqaradi, chunki foydalaniladigan vositalarga va hattoki foydalanuvchi afzalliklariga qarab tabulyatsiya punktining joylashuvi har xil bo'lishi mumkin.

Misol tariqasida bitta dasturchi afzal ko'radi yorliq to'xtaydi to'rtdan biri va ularning asboblar to'plami shu tarzda tuzilgan va ulardan kodlarini formatlash uchun foydalanadi.

int     ix;     // Massivni skanerlash uchun indeksuzoq    sum;    // Summa uchun akkumulyator

Boshqa dasturchi sakkizta to'xtash joyini afzal ko'radi va ularning asboblar to'plami shu tarzda tuzilgan. Boshqasi asl odamning kodini tekshirganda, uni o'qish qiyin kechishi mumkin.

int             ix;             // Massivni skanerlash uchun indeksuzoq    sum;    // Summa uchun akkumulyator

Ushbu muammoning keng qo'llaniladigan echimlaridan biri hizalanish uchun yorliqlardan foydalanishni taqiqlash yoki yorliq to'xtash joylarini qanday o'rnatish kerakligi qoidalarini o'z ichiga olishi mumkin. Shuni esda tutingki, yorliqlar doimiy ravishda ishlatilsa, mantiqiy chuqurlik bilan cheklangan va hizalamak uchun ishlatilmasa yaxshi ishlaydi:

sinf MyClass {	int foobar(		int qux, // birinchi parametr		int quux); // ikkinchi parametr	int foobar2(		int qux, // birinchi parametr		int quux, // ikkinchi parametr		int quuux); // uchinchi parametr};

Shuningdek qarang

Adabiyotlar

  1. ^ "PEP 0008 - Python kodi uchun uslubiy qo'llanma". python.org.

Tashqi havolalar