А.В. Столяров - Оформление программного кода (1108519), страница 4
Текст из файла (страница 4)
 ÷àñòíîñòè, ìû óçíàåì, ÷òî ñòèëè ðàññòàíîâêè îòñòóïîâ áûâàþò ðàçíûìè, íî äàëåêî íå âñå îíè äîïóñòèìû, è íàó÷èìñÿîòëè÷àòü äîïóñòèìîå îò íåäîïóñòèìîãî. Ïîêà æå îòìåòèì íåñêîëüêî íàèáîëåå ôóíäàìåíòàëüíûõ ïðèíöèïîâ.Ïðåæäå âñåãî, ðàçìåð ñòðóêòóðíûõ îòñòóïîâ áûâàåò ðàçíûì è ìîæåò çàâèñåòü îò ëè÷íûõ ïðåäïî÷òåíèé ïðîãðàììèñòà èëè (÷àùå) ðóêîâîäèòåëÿ ïðîåêòà.  âûøåïðèâåä¼ííûõ ïðèìåðàõ ìû èñïîëüçîâàëè ÷åòûðåïðîáåëà, ÷òî ñîîòâåòñòâóåò ðàçìåðó îòñòóïà, óñòàíîâëåííîìó ïî óìîë÷àíèþ â ðåäàêòîðå GNU Emacs. Âî ìíîãèõ ïðîåêòàõ (â ÷àñòíîñòè, â ÿäðå ÎÑ Linux) äëÿ ñòðóêòóðíîãî îòñòóïà èñïîëüçóþò ñèìâîë òàáóëÿöèè,ïðè÷¼ì ðîâíî îäèí. Ìîæíî âñòðåòèòü ðàçìåð îòñòóïà â äâà ïðîáåëà èìåííî òàêèå îòñòóïû ïðèíÿòû â êîäå ïðîãðàìì, âûïóñêàåìûõ Ôîíäîìñâîáîäíîãî ïðîãðàììíîãî îáåñïå÷åíèÿ (FSF). Ñîâñåì ðåäêî èñïîëüçóåòñÿ òðè ïðîáåëà; òàêîé ðàçìåð îòñòóïà èíîãäà âñòðå÷àåòñÿ â ïðîãðàììàõ, íàïèñàííûõ äëÿ Windows.
Äðóãèå ðàçìåðû îòñòóïà èñïîëüçîâàòüíå ñëåäóåò, è ýòîìó åñòü ðÿä ïðè÷èí. Îäíîãî ïðîáåëà ñëèøêîì ìàëî äëÿâèçóàëüíîãî âûäåëåíèÿ áëîêîâ, ëåâûé êðàé òåêñòà ïðè ýòîì íà÷èíàåòâîñïðèíèìàòüñÿ êàê íå÷òî ïëàâíîå è íå ñëóæèò ñâîåé öåëè. Êîëè÷åñòâîïðîáåëîâ, ïðåâûøàþùåå ÷åòûðå, òðóäíî ââîäèòü: åñëè èõ áîëüøå ïÿòè,èõ ïðèõîäèòñÿ ñ÷èòàòü ïðè ââîäå, ÷òî ñèëüíî çàìåäëÿåò ðàáîòó, íî è12ïÿòü ïðîáåëîâ îêàçûâàåòñÿ ââîäèòü î÷åíü íåóäîáíî. Åñëè æå èñïîëüçîâàòü áîëüøå îäíîé òàáóëÿöèè, òî íà ýêðàí íè÷åãî íå ïîìåñòèòñÿ: â ñàìîìäåëå, òðåòèé óðîâåíü âëîæåííîñòè îêàæåòñÿ ïðè ýòîì íà 48-é ïîçèöèè,îñòàâëÿÿ âñåãî 32 çíàêîìåñòà íà âñþ èíôîðìàöèþ, à ÷åòâ¼ðòûé óðîâåíü,äëÿ êîòîðîãî ïîòðåáóåòñÿ 64-ÿ ïîçèöèÿ, âîîáùå áóäåò íåâîçìîæíî èñïîëüçîâàòü.Âòîðîé ïðèíöèï ñòðóêòóðíûõ îòñòóïîâ ñîñòîèò â èõ ïîñòîÿíñòâå âðàìêàõ îäíîé ïðîãðàììû.
Âû ìîæåòå âûáðàòü, êàêîé ðàçìåð èç äîïóñòèìûõ (äâà ïðîáåëà, òðè ïðîáåëà, ÷åòûðå ïðîáåëà, òàáóëÿöèÿ) âàì áîëüøåíðàâèòñÿ, íî âûáðàííûé âàìè ðàçìåð îòñòóïîâ äîëæåí èñïîëüçîâàòüñÿâî âñåé âàøåé ïðîãðàììå. Åñëè âäðóã âû ïî êàêèì-òî ïðè÷èíàì ðåøèòå èçìåíèòü ïåðâîíà÷àëüíîå ðåøåíèå îòíîñèòåëüíî ðàçìåðà îòñòóïîâ, òîñëåäóþùèì äåéñòâèåì äîëæíî áûòü ñîîòâåòñòâóþùåå èçìåíåíèå ðàçìåðàîòñòóïîâ âî âñåé óæå íàïèñàííîé ÷àñòè ïðîãðàììû.Íàêîíåö, ïîñëåäíèé óíèâåðñàëüíûé ïðèíöèï ñîñòîèò â òîì, ÷òîëþáàÿ ñòðóêòóðà äîëæíà çàêàí÷èâàòüñÿ â òîé æå ïîçèöèè ïî ãîðèçîíòàëè, â êîòîðîé îíà íà÷àëàñü.
Èíîãäà ýòî ïðàâèëî (îøèáî÷íî!)ïîíèìàåòñÿ â òîì ñìûñëå, ÷òî ñîîòâåòñòâóþùèå äðóã äðóãó ñêîáêè (ñëîâàbegin è end â Ïàñêàëå, ôèãóðíûå ñêîáêè â ÿçûêå Ñè è ò. ä.) äîëæíû áûòüðàçìåùåíû â îäíîé êîëîíêå, íî ýòî íåâåðíî. Îòêðûâàþùóþ ñêîáêó ÷àñòî îñòàâëÿþò íà îäíîé ñòðîêå ñ çàãîëîâêîì (îïåðàòîðà, ïîäïðîãðàììû,ñòðóêòóðû è ò.
ï.; èìåííî òàê ìû ïîñòóïèëè â âûøåïðèâåä¼ííûõ ïðèìåðàõ), ïðè ýòîì îíà ìîæåò îêàçàòüñÿ ñêîëü óãîäíî äàëåêî ñïðàâà, íîñêîáêà ïðè ýòîìíàõîäèòüñÿ â òîé æå êîëîíêå,ãäå íà÷àëñÿ çàãîëîâîê. Âîò ïðèìåð íåäîïóñòèìîãî ðàçìåùåíèÿ çàêðûâàþùåé ñêîáêè ïîä îòêðûâàþùåé:çàêðûâàþùàÿîáÿçàíàif a = 0 then beginif b = 0 thenwriteln('True for any x')elsewriteln('No roots')end{ ÒÀÊ ÍÅËÜÇß!!! }Ñðàâíèòå ýòîò ïðèìåð ñ ïðèâåä¼ííîé âûøå ïðîãðàììîé. Îòìåòèì, ÷òîñëåäóþùèé âàðèàíò ñ÷èòàåòñÿ âïîëíå äîïóñòèìûì:if a = 0 thenbeginif b = 0 thenwriteln('True for any x')elsewriteln('No roots')end13Îò ïðåäûäóùèõ ïðèìåðîâ ýòîò âàðèàíò îòëè÷àåòñÿ òåì, ÷òî ñëîâî begin(à äëÿ ÿçûêà Ñè îòêðûâàþùàÿ ôèãóðíàÿ ñêîáêà) ðàçìåùàåòñÿ íà îòäåëüíîé ñòðîêå.
Îáû÷íî â òàêèõ ñëó÷àÿõ ñêîáêè íå ñäâèãàþòñÿ îòíîñèòåëüíî çàãîëîâêà, íî è ýòî ïðàâèëî íå ÿâëÿåòñÿ àáñîëþòíûì: èíîãäàñêîáêè òîæå ñäâèãàþò. Òàêîé âàðèàíò ïðèìåíÿåòñÿ êðàéíå ðåäêî, íî, òåìíå ìåíåå, òàêæå îòíîñèòñÿ ê ÷èñëó äîïóñòèìûõ2 :if a = 0 thenbeginif b = 0 thenwriteln('True for any x')elsewriteln('No roots')endÇäåñü ìû ïî-ïðåæíåìó èñïîëüçîâàëè îòñòóï â ÷åòûðå ïðîáåëà, íîîáû÷íî ïðè òàêîé ðàññòàíîâêå îïåðàòîðíûõ ñêîáîê âîçíèêàåò îñòðûé äåôèöèò ìåñòà ïî ãîðèçîíòàëè, òàê ÷òî ÷àùå âñåãî ïðè ýòîì èñïîëüçóþòäâà ïðîáåëà, à íå ÷åòûðå.Âàæíî ïîìíèòü, ÷òî êàêîé áû èç ñòèëåé (ðàçóìååòñÿ, èç äîïóñòèìûõ )âû íè âûáðàëè, åãî ñëåäóåò ïðèäåðæèâàòüñÿ íà ïðîòÿæåíèè âñåãî òåêñòàïðîãðàììû.Îòìåòèì åù¼ îäèí âàæíûé ìîìåíò.Íè â êîåì ñëó÷àå íåëüçÿäîïóñêàòü ñìåøèâàíèÿ ïðîáåëîâ è òàáóëÿöèé ïðè ïîñòðîåíèèîòñòóïîâ.
Åñëè âû èñïîëüçóåòå äëÿ îòñòóïîâ òàáóëÿöèþ, èñïîëüçóéòåå¼; åñëè âû èñïîëüçóåòå ïðîáåëû íèêîãäà íå çàìåíÿéòå èõ òàáóëÿöèÿìè, ñêîëüêî áû èõ íè ïðèøëîñü âêîëîòèòü. Äåëî òóò â òîì, ÷òîñîîòíîøåíèå òàáóëÿöèè è ïðîáåëà, âîîáùå ãîâîðÿ, çàâèñèò îò èñïîëüçóåìîé îïåðàöèîííîé ñðåäû, òåêñòîâîãî ðåäàêòîðà, ïðîãðàììû ïðîñìîòðàè ò. ä.; äàëåêî íå âñåãäà è íå âåçäå òàáóëÿöèÿ ñîîòâåòñòâóåò âîñüìè ïîçèöèÿì.Äåëî îñëîæíÿåòñÿ åù¼ è òåì, ÷òî íåêîòîðûå òåêñòîâûå ðåäàêòîðû,ÿêîáû îðèåíòèðîâàííûå íà ïðîãðàììèñòîâ, çà÷åì-òî ïî ñîáñòâåííîé èíèöèàòèâå çàìåíÿþò âîñåìü ïðîáåëîâ ñèìâîëîì òàáóëÿöèè; â êà÷åñòâå ïðèìåðà òàêèõ ñâîåâîëüíûõ ðåäàêòîðîâ ìîæíî íàçâàòü âñòðîåííûé ðåäàêòîðñðåäû Turbo Pascal (êîíå÷íî, ýòà ñðåäà ê íûíåøíåìó âðåìåíè ìåðòâååèíûõ åãèïåòñêèõ ìóìèé, íî, ê ñîæàëåíèþ, â ó÷åáíûõ çàâåäåíèÿõ îíà âñ¼åù¼ â õîäó), à èç ðåäàêòîðîâ ïîä ÎÑ Unix ïî÷åìó-òî î÷åíü ïîïóëÿðíûéñðåäè ñòóäåíòîâ âñòðîåííûé ðåäàêòîð îáîëî÷êè Midnight Commander.òîëüêîÄëÿ òåõ, êòî óâåðåí â íåäîïóñòèìîñòè ýòîãî âàðèàíòà, çàìåòèì, ÷òî èìåííî òàêîôîðìëåíû èñõîäíûå òåêñòû Glibc è âîîáùå ïðàêòè÷åñêè âñåõ ïðîãðàìì, ñîçäàâàåìûõ êîìàíäîé GNU.
Ìîæíî ñîãëàñèòüñÿ ñ ìíåíèåì Òîðâàëüäñà, ÷òî ýòîò ñòèëü íåñëèøêîì êðàñèâ, íî íàçûâàòü åãî íåäîïóñòèìûì âñ¼ æå íå ñòîèò, ïîñêîëüêó ïðîáëåìû, âîçëàãàåìûå íà ñòðóêòóðíûå îòñòóïû, ýòîò ñòèëü ðåøàåò íè÷óòü íå õóæå äðóãèõäîïóñòèìûõ ñòèëåé.214Îáû÷íî çàìåíó ïðîáåëîâ òàáóëÿöèÿìè ìîæíî îòêëþ÷èòü; åñëè ýòî òàê îáÿçàòåëüíî îòêëþ÷èòå å¼, åñëè íåò èñïîëüçóéòå äðóãîé ðåäàêòîð. Îòìåòèì, ÷òî ïîëüçîâàòüñÿ âñòðîåííûìè ðåäàêòîðàìè òàê íàçûâàåìûõ èíòåãðèðîâàííûõ ñðåä ðàçðàáîòêè â ëþáîì ñëó÷àå íå ñòîèò åñòü ìíîãîãîðàçäî áîëåå óäîáíûõ òåêñòîâûõ ðåäàêòîðîâ, ñðåäè êîòîðûõ ìîæíî âûáðàòü òàêîé, êîòîðûé ïîíðàâèòñÿ ëè÷íî âàì.1.2.3.
Åù¼ î ïðîáåëàõÑòðóêòóðíûå îòñòóïû íå åäèíñòâåííûé ñëó÷àé, êîãäà â ïðîãðàììóðàäè å¼ ëó÷øåé ÷èòàåìîñòè âñòàâëÿþòñÿ ïðîáåëüíûå ñèìâîëû, íå âëèÿþùèå íà å¼ ñìûñë. Òàê, ñòðóêòóðíî îáîñîáëåííûå ÷àñòè ïðîãðàììû (íàïðèìåð, îòäåëüíûå ïðîöåäóðû è ôóíêöèè) ðåêîìåíäóåòñÿ îòäåëèòü äðóãîò äðóãà ïóñòûìè ñòðîêàìè. Ñèìâîëû-ðàçäåëèòåëè, êîòîðûå íå òðåáóþòïðîáåëîâ äëÿ îòäåëåíèÿ èõ îò äðóãèõ ëåêñåì, òåì íå ìåíåå ÷àñòî îáðàìëÿþò ïðîáåëàìè ñ îáåèõ ñòîðîí èëè ñ îäíîé ñòîðîíû.Ê âîïðîñó î òîì, êîãäà ñëåäóåò è êîãäà íå ñëåäóåò âñòàâëÿòü â òåêñòïðîãðàììû ¾ëèøíèå¿ ïðîáåëû, ìû åù¼ âåðí¼ìñÿ, à ïîêà îòìåòèì îäèíî÷åíü âàæíûé ìîìåíò:. Òàêèå ïðîáåëû ÷àñòî ïîÿâëÿþòñÿ â òåêñòå ïðîãðàììû ¾ñàìè ñîáîé¿, íåïðåäíàìåðåííî: íàïðèìåð,åñëè âû íàáðàëè ñòðîêó êîäà ñ ïðîáåëîì ìåæäó îòäåëüíûìè å¼ ÷àñòÿìè,à çàòåì ðåøèëè ýòó ñòðîêó ðàçîðâàòü â òîì ìåñòå, ãäå ñòîèò ïðîáåë, ïîñòàâèëè êóðñîð íà ïåðâûé ñèìâîë ïîñëå ïðîáåëà (òîò ñèìâîë, êîòîðûéñòàíåò ïåðâûì ñèìâîëîì íîâîé ñòðîêè) è íàæàëè Enter, òî ýòà êàçàëîñüáû, ïðèâû÷íàÿ, î÷åâèäíàÿ è áåçîáèäíàÿ ïîñëåäîâàòåëüíîñòü äåéñòâèéêàê ðàç è ïðèâåä¼ò ê òîìó, ÷òî íà ïðåäûäóùåé ñòðîêå â êîíöå îñòàíåòñÿ¾íåâèäèìûé¿ ïðîáåë, âåäü ñèìâîë ïåðåâîäà ñòðîêè âû âñòàâèëè ïîñëåíåãî.Ïðè÷èíà êðàéíåé íåæåëàòåëüíîñòè òàêèõ ïðîáåëîâ äîâîëüíî ïðîñòà.Åñëè ðàññìîòðåòü äâå ñòðî÷êè êîäà, åäèíñòâåííûì ðàçëè÷èåì ìåæäó êîòîðûìè îêàæåòñÿ íàëè÷èå/îòñóòñòâèå ïðîáåëîâ â êîíöå ñòðîêè, òî ôîðìàëüíî (ò.
å., íàïðèìåð, ñ òî÷êè çðåíèÿ ñèñòåì êîíòðîëÿ âåðñèé) ýòî áóäóò äâå ðàçíûå ñòðîêè, íî åñëè ýòè äâå ñòðîêè ïðåäúÿâèòü äëÿ ñðàâíåíèÿ÷åëîâåêó, îí íå ñìîæåò óâèäåòü, â ÷¼ì çàêëþ÷àåòñÿ ðàçíèöà ìåæäó íèìè.Âî ìíîãèõ ñëó÷àÿõ, âîçíèêàþùèõ â ïðîãðàììèñòñêîé ïðàêòèêå, ÷åëîâåê,èçó÷àþùèé ðàçëè÷èÿ äâóõ âåðñèé îäíîãî è òîãî æå ïðîãðàììíîãî òåêñòà, íå ìîæåò ñåáå ïîçâîëèòü îñòàâèòü òàêóþ ñèòóàöèþ áåç âíèìàíèÿ,à ýòî çíà÷èò, ÷òî åìó ïðèä¼òñÿ ïîòðàòèòü âðåìÿ (èíîãäà çíà÷èòåëüíîå)íà âûÿñíåíèå, â ÷¼ì æå òóò äåëî. Âûÿñíèòü, ÷òî â êîíöå îäíîé èç äâóõñòðîê ïðèñóòñòâóþò ¾íåâèäèìûå¿ ïðîáåëû, â íåêîòîðûõ ñëó÷àÿõ áûâàåòíåïðîñòî òàê, åñëè ïðîãðàììèñò èçó÷àåò îò÷¼ò îá èçìåíåíèÿõ â êîäå, ñãåíåðèðîâàííûé â âèäå html-ñòðàíèöû, òî ¾íåâèäèìûå¿ ïðîáåëû îííèêîãäà íå ñëåäóåò â òåêñòå â êîíöå ñòðîêèîñòàâëÿòü ïðîáåëû, êîòîðûõ ¾íå âèäíî¿15ñìîæåò çàìåòèòü íå ðàíüøå, ÷åì çàãðóçèò îáå âåðñèè â ðåäàêòîð òåêñòîâ(÷òî ìîæíî è íå äîãàäàòüñÿ ñäåëàòü).1.2.4.
Ðàçáèåíèå çàäà÷ íà ïîäçàäà÷èÂåðí¼ìñÿ ê ïðèíöèïàì íàïèñàíèÿ ñàìîðàçúÿñíÿþùåãî êîäà. Ïîñëåäíèì èç òð¼õ ïåðå÷èñëåííûõ íàìè ïðèíöèïîâ áóäåò ïðèìåí¼ííûé ê ïðîãðàììèðîâàíèþ êëàññè÷åñêèé äåâèç ¾ðàçäåëÿé è âëàñòâóé¿.Ïðîãðàììó ñëåäóåò ðàçáèòü íà ïîäïðîãðàììû (ïðîöåäóðû,ôóíêöèè è ò. ï.) òàê, ÷òîáû êàæäóþ èç íèõ ìîæíî áûëî îõâàòèòü îäíèì âçãëÿäîì. Íà÷èíàþùèå ïðîãðàììèñòû (îáû÷íî øêîëüíè-êè èëè ñòóäåíòû ìëàäøèõ êóðñîâ) ÷àñòî äåëàþò îäíó âåñüìà ñåðü¼çíóþîøèáêó: ïðåíåáðåãàÿ ïîäïðîãðàììàìè, ïûòàþòñÿ ðåàëèçîâàòü âñþ çàäà÷ó â âèäå îäíîãî áîëüøîãî ìàññèâà êîäà ãëàâíîé ïðîãðàììû íà Ïàñêàëå èëè ôóíêöèè main íà Ñè.