сряда, 14 ноември 2007 г.

За конвенциите

Интересна статия на Стефан Кънев относно конвенциите.

Според мен използването на определени езикове конструкции (for vs. while, ArrayList vs. LinkedList), е твърде ниско ниво за да подлежи на конвенция - програмиста трябва да използва целия арсенал на езика си за да се изрази четливо и еднозначно.

От досегашната ми работа мога да направя няколко извода за конвенциите:
- конвенции трябва да има. Точка. Няма "за" или "против". Обикновенно това са конвенции за именуване на променливи, методи, функции, класове, файлове, таблици, колони (в база от данни), и т.н. По този начин се постига "предсказуемост" и по лесно овладяване и разбиране на не-чак-толкова-добре познато парче код.
- конвенциите трябва да са стандартни. Почти за всеки език има такива, които са утвардени и широко приети. По-лошото от това да нямаш конвенция е да си измислиш такава. По този начин излишно се затрудняват новите хора в екипа със запознавяне с yet another конвенция. Има опасност общоприета конвенция да не съвпада с "вкуса" на някои разработчици. Ако хората в екипа са професионалисти те ще "свикнат" с конвенцията - все пак кодът е една мноооого малка част от изкуството на софтуерното инженерство.
- конвенциите трябва да са "строги, но справедливи". Ако дадена конвенция не се вписва добре в общата картина на приложението, то най-вероятно тя не е подходяща. Възможно е да се правят малки промени в конвенциите по време на еволюцията на проекта, стига тези промени да не са драстични. Все пак конвенцията е да помага, а не да спъва програмирането.

В доста езици има помощни инструменти, които подпомагат уеднаквяване на оформлението на изходния код. С помощта на такъв инструмент може да се "уеднаквят" стиловите предпочитания за поставяне на { ... }. Има приставки към различни IDE (напр. Eclipse), които позволяват да се алармира ако даден метод/функция надхвърлят разумен брой редове. Така спадването на конвенцията може да се подсигури не само с дисциплина, но и с помощни средства.

2 коментара:

Stefan Kanev каза...

За for/while.

Зла работа са inter-blog темите...

corwin каза...

Сви, знам, че досаждам и се вживявам, обаче утвърден се пише с "ъ". :)

Я, Акуариуса... :)

И последно "За конвенциите" - по съм съгласен с Кънев. Трябва да има ред.

[quote]
Според мен използването на определени езикове конструкции (for vs. while, ArrayList vs. LinkedList), е твърде ниско ниво за да подлежи на конвенция - програмиста трябва да използва целия арсенал на езика си за да се изрази четливо и еднозначно.
[/quote]

Наистина в крайна сметка ще се изразиш четливо и еднозначно от твоята гледна точка. Но когато всичко е конвенция ще бъде четливо и еднозначно за всички. Например, някой може да го кефи да ползва unless у Пърло (част от артилерията на езика). Да де, ама като го хване друг човек, който е свикнал да не го ползва ще се поколебае докато разбере за какво става дума.