"Здравей, Амиго! Днес ще ти разкажа за codeовите стилове и meaningто на codeовия стил."

„Ще започна с най-важното.  Java codeът трябва да е лесен за четене.  Общият подход към codeа е следният: codeът се пише веднъж, но се чете сто пъти.“

„Да предположим, че вие ​​и 10 други програмисти пишете приложение. Вие работите върху приложението в продължение на три години, с междинни версии на всеки три месеца.“

"Толкова дълго?"

„Това е Java, моят млад сHowалец! „Какво ще кажете за корпоративна система, работеща на дузина сървъри и написана от 100 души за повече от 6 години? Това също се случва понякога."

"Уау!"

„Както и да е, основното правило, основното изискване за codeа е той да бъде лесен за четене от другите разработчици.“

„В други езици за програмиране хората често работят като малки екипи върху малки задачи, така че може да имат друго основно правило, като например „Работи? Отлично“.

„В течение на няколко години всички членове на вашия екип ще направят няколко промени в codeа, който сте написали. И всеки път ще трябва да разбират How работи codeът.“

„А неразбираемият code, който работи перфектно, е труден за промяна.  Те ще го отхвърлят и ще го пренапишат по свой начин.  Така че, пишете code, който другите могат да разберат.  Ако можете да подобрите своя code, тогава го подобрете. Ако може да бъде подобрен, тогава трябва да се подобри! "

„Ако пишете code за 15 minutesи и след това прекарате два часа в подобряването му, вие го правите правилно. Колко време спестявате на екипа?“

„„2 часа, за да разберете вашия code“ x „100 пъти, когато хората ще трябва да го разберат“ = 200 часа.“

„Извадих тези цифри от нищото, но искам да разберете проблема и неговия обхват.  Вашият code е създаден, за да бъде прочетен от други програмисти.  Всичко останало е второстепенно.“

„Кодът не работи ли правилно? Ще го поправим. Не е оптимизиран? Ще го оптимизираме. Не е documentиран? Ще добавим коментари.“

" Кодът трудно ли се чете? Хвърлете тези глупости в кошчето и напишете всичко отново от нулата! "

— Не мислех, че е толкова голяма работа.

„Една от причините Java да е водещ език за програмиране е, че целият code на Java е написан, за да бъде прочетен от други програмисти.“

„А сега да преминем към втория въпрос: How да направите codeа си възможно най-лесен за четене?

„Всеки може да разбере, когато някой говори познати думи на неговия or нейния роден език. Същото важи и тук. Кодът е лесен за четене, когато програмистът може лесно да познае:

А)  Какво прави всеки метод

Б)  Целта на всеки клас

C)  Какво точно съхранява всяка променлива.

Всичко това се съобщава в имена: имена на класове, имена на методи и имена на променливи. Освен това има стил, когато става дума за именуване на променливи. И има стил на code."

— Готов съм да слушам.

" Програмирането се основава на добър английски!  Добре написаната програма се чете като обикновена техническа documentация. "

" Да започнем с имената. "

„Името на метода трябва накратко да описва Howво прави методът. Тогава codeът може да се чете като проста проза.“

програма
public String downloadPhoto(String url)
{
 String resultFileName = TempHelper.createTempFileName();

 Downloader downloader = new SingleFileDownloader(new Url(url));
 downloader.setResultFileName(resultFileName)
 downloader.start();
 while(downloader.isDone())
 {
  Thread.sleep(1000);
 }

 if (downloader.hasError())
  return null;

 return resultFileName;
}

— Ето How се чете такава програма.

Ред 1.

„Методът се нарича „downloadPhoto“. Изглежда, че изтегля файл със снимка от интернет. Къде се изтегля? Все още не знаем. Откъде? Методът има параметър, наречен url – това вероятно е URL addressът за изтеглянето."

Ред 3.

"Променливата resultFileName се декларира и се присвоява стойност от TempHelper.createTempFileName();"

Така че това трябва да е локалният път към file, където ще запазим нашия изтеглен файл.

„Името „TempHelper“ не ни казва нищо. Суфиксът „Помощник“ казва, че това е вид помощен клас, който не съдържа важна бизнес логика, а по-скоро се използва за опростяване на рутинни задачи, които се случват често.“

„Името на метода „createTempFileName“ показва, че този метод създава и връща името на временен файл (временен файл). Временният файл е временен файл, който се създава за известно време и след това обикновено се изтрива до затварянето на програмата. "

Ред 5.

„Създава се обект SingleFileDownloader и се присвоява на програмата за изтегляне на променливи.“

Това е обектът, който ще изтегли нашия файл от Интернет.

„Обект SingleFileDownloader е присвоен на променливата за изтегляне. От името можем да предположим, че програмата има няколко типа класове за изтегляне. Единият е написан за изтегляне на единични файлове и вероятно можем да очакваме да срещнем други изтеглящи програми в codeа за групи на файлове с имена като: MultiFileDownloader, FileGroupDownloader or DirectoryDownloader"

Ред 6.

„Задаваме свойството resultFileName на обекта за изтегляне равно на стойността на променливата resultFileName. С други думи, казваме на зареждащия къде да запише изтегления файл. Както бихте очаквали. Така че, ние основно предвиждаме codeа!“

Ред 7.

„Извикваме метода за стартиране. Изтеглянето започва. Това има смисъл. Чудя се How става изтеглянето: на части, в отделна нишка or цялото нещо тук? Ако изтеглим цялото нещо тук, може да отнеме дълго време и има последствия“.

Редове 8-11.

„Ах. Тук виждаме стандартния цикъл, написан от някой, чакащ изтеглянето да приключи. Обектът за изтегляне има свойство done, което се връща от метода isDone(). Тъй като методът се нарича isDone(), а не getDone( ), заключаваме, че готовата променлива е булева or може би булева."

Редове 13-14.

„Ако възникне грешка по време на изтеглянето, тогава методът downloadPhoto връща null. Добре е, че обработва грешки. Лошо е, че просто връща null — не е ясно Howва е грешката. Би било по-добре да хвърлите изключение с информация за грешката."

Ред 16.

„Връщаме пътя до локалния файл, който съдържа изтегления файл.“

"Уау!"

„Кодът на тази програма прави абсолютно ясно Howво прави. Можете дори да правите предположения за това How е организирана програмата и Howви други класове/методи ще намерим.“

„Сега разбирам колко важни са имената.

„Повече за имената. Често можете да познаете кои методи има даден обект/клас. Например, ако обектът е колекция, тогава той най-вероятно ще има метод size() or count(), за да получи броя на елементите. Също , вероятно ще има метод add() or insert(). Елементите се извличат от класове на колекция чрез методите get/getItem/getElement."

„Ако една променлива се нарича i, j or k, тогава тя най-вероятно е брояч на цикъл.“

„Ако една променлива се нарича m or n, тогава най-вероятно е размерът на масив/колекция.“

„Ако една променлива се нарича име, тогава тя най-вероятно е низ, съдържащ нечие име.“

„Ако един клас се нарича FileInputStream, тогава той е едновременно файл и входен поток.“

„Колкото повече code виждате, толкова по-лесно е да прочетете codeа на другите.“

„Но понякога има code, който е много труден за четене. В този случай ето един много практичен съвет:“

Бакшиш
Напишете code, сякаш ще се поддържа от жесток психопат , който знае къде живеете .

"Това е смешно и не е смешно в същото време."

„Сега малко за стиловете, използвани за именуване на променливи.“

„Разработчиците на Java се опитват да дадат изключително информативни имена на променливи и методи. В резултат на това имената често се състоят от няколко думи. Има 4 стила за главни букви на съставни имена.“

1) Малки букви  – Всички думи се пишат с малки букви. Например:

„Зелена къща“  става „оранжерия“

„Холивудско момиче“  става  „холивудско момиче“

Този стил се използва за имена на пакети.

2) Главни букви  – Всички думи се пишат с главни букви и се разделят с долна черта. Например:

„Максимална стойност“  става MAX_VALUE

„Броят котки“  става CAT_COUNT

„Този ​​стил се използва за имена на константи (крайни статични полета).“

3) CamelCase  – Всички думи се изписват с малки букви, с изключение на първата буква на всяка дума, която е главна. Например:

„Зелена къща“  става  „Оранжерия“

„Холивудско момиче“  става „Холивудско момиче“

Този стил се използва за имена на класове и интерфейси.

4) Малка камилска буква (смесени букви)  – Всички думи се пишат с малки букви, с изключение на първата буква на всяка дума, с изключение на първата, която е главна. Например:

„Получаване на ширина“ става „getWidth“

„Get Hollywood girl name“ става  „getHollywoodGirlName“

„Този ​​стил се използва за имена на променливи и методи.“

„Така че няма твърде много правила.“

1)  Всичко е написано с малки букви.

2)  Имената на класовете и интерфейсите винаги се пишат с главни букви.

3)  Имената на пакетите винаги са с малки букви.

4)  Константите винаги са с главни букви.

„Има няколко нюанса, но като цяло това е.“

„А сега относно методите.  „Имената на методи почти винаги започват с глагол! 'count' е лошо име за метод. По-добре е да го наречете getCount(). Методът извършва няHowво действие върху обекта:  startDownload , interrupt  , sleep  , loadPirateMusic ."

„Както вече знаете, има гетери и сетери за работа със свойства/полета на обект:  getName / setName , getCount / setCount и т.н.“

„Единственото изключение е за булевите стойности. За булевите имена имената на getter използват „is“, а не „get“, напр. isDone, isEmpty. По този начин е по-близо до обикновената реч.“

„Какво ще кажеш да работиш по два часа на ден instead of по 8? Изкушен?“

"Да!"

„Както трябва да бъдете. За младши Java разработчик основното изискване е отлично разбиране на основите на Java, т.е. Java Core.“

„Имам друг въпрос. Защо имаме тези различни методи за получаване на броя на елементите?“

Клас Метод/свойство за получаване на броя на елементите
низ дължина ()
Масив дължина
ArrayList размер ()
ThreadGroup активен брой ()

„Първо, Java е изобретена преди повече от 20 години, преди да бъдат установени изисквания като setCount / getCount , и имаше общ подход, взет от езика C, за да „го направи възможно най-кратък“.“

„Второ, семантиката играе роля тук. Когато говорим за масив, говорим за неговата дължина. Когато говорим за колекция, говорим за неговия размер.“

— Какъв интересен урок.

— Бих искал да ти разкажа повече, но се страхувам, че няма да си спомниш всичко наведнъж. По-добре е да ти го раздавам на малки порции.

„Но искам да засегна стила по отношение на използването на къдрави скоби: {}. Има два подхода:“

1)  Скобата отива на нов ред всеки път

2)  Отварящата скоба отива в края на предишния ред, докато затварящата скоба отива на нов ред. Този стил се нарича „египетски брекети“.

„Честно казано, вие избирате How да codeирате. Много хора използват отваряща фигурна скоба на същия ред. Много хора я поставят на нов ред. Това е като дебат кой край на яйцето да се счупи: малкият край or големият край."

„Единственото нещо, което мога да препоръчам, е да се придържате към стила, който се използва в проекта, върху който работите. Не променяйте codeа на някой друг, за да съответства на предпочитания от вас стил.  Хората са несъвършени. Казвам ви това като доктор Билаабо. "

„Благодаря за интересния урок, Билаабо. Ще отида да помисля върху казаното от теб.“