А.В. Столяров - Оформление программного кода (1108519), страница 9
Текст из файла (страница 9)
Åñëè æå óäîâëåòâîðèòåëüíî îòâåòèòü íà âûøåïåðå÷èñëåííûå âîïðîñû íå óäàëîñü, òî âïîëíå âîçìîæíî, ÷òî âàì ïîìîæåòíåáîëüøàÿ ïåðåäåëêà èìåþùåãîñÿ êîäà, â îñîáåííîñòè èíòåðôåéñîâ ïîäïðîãðàìì. Íàïðèìåð, âàøè ïîäïðîãðàììû ìîãóò ïðèíèìàòü íà âõîä òàêèå òèïû äàííûõ, êîòîðûå ïðèøëè èç äðóãîé áèáëèîòåêè èëè èç òàêîãîìîäóëÿ âàøåé ïðîãðàììû, êîòîðûé âû íå õîòèòå âêëþ÷àòü â áèáëèîòåêó.Êîíå÷íî, â òàêîì âèäå âàøè ïîäïðîãðàììû äëÿ âûäåëåíèÿ â áèáëèîòåêó íå ãîäÿòñÿ, íî ìîæåò ïîëó÷èòüñÿ òàê, ÷òî èõ î÷åíü ëåãêî ïåðåäåëàòüíà ðàáîòó ñî ñòàíäàðòíûìè òèïàìè äàííûõ âìåñòî ñïåöèôè÷åñêèõ äëÿâàøåé ïðîãðàììû. öåëîì âûäåëåíèå ÷àñòè êîäà â ñàìîñòîÿòåëüíóþ áèáëèîòåêó âûãîäíî ñ äâóõ òî÷åê çðåíèÿ: âî-ïåðâûõ, òàêîé êîä ìîæíî ïîâòîðíî èñ32ïîëüçîâàòü â äðóãèõ ïðîãðàììàõ, è, âî-âòîðûõ, ñöåïëåííîñòü ìîäóëåéïðè ýòîì ðåçêî ïàäàåò, ñíèæàÿ îáùóþ ñëîæíîñòü ðàáîòû ñ âàøåé ïðîãðàììîé.
Ïîìíèòå òîëüêî, ÷òî áèáëèîòåêà äîëæíà óäîâëåòâîðÿòü îïðåäåë¼ííûì ñâîéñòâàì, êîòîðûå ïåðå÷èñëåíû âûøå; áåç ñîáëþäåíèÿ ýòèõïðîñòûõ ïðàâèë ñîçäàíèå îòäåëüíîé áèáëèîòåêè ìîæåò ïðèâåñòè òîëüêîê äîïîëíèòåëüíûì ñëîæíîñòÿì. çàêëþ÷åíèå ðàçãîâîðà î áèáëèîòåêàõ äàäèì åù¼ îäíó ðåêîìåíäàöèþ..  ñîâðåìåííûõ óñëîâèÿõ äèíàìè÷åñêîå ñâÿçûâàíèå íå äà¼òïðàêòè÷åñêè íèêàêîãî îùóòèìîãî âûèãðûøà, ïðè ýòîì òðåáóÿ èçðÿäíîãîäîïîëíèòåëüíîãî ðàñõîäà âðåìåíè è ñèë ïðîãðàììèñòîâ. Òàê èëè èíà÷å,ñäåëàòü ñâîþ áèáëèîòåêó äèíàìè÷åñêîé âû âñåãäà óñïååòå.Íå òîðîïèòåñü äåëàòü âàøó áèáëèîòåêó äèíàìè÷åñêè ñâÿçûâàåìîé1.5. ×òî òàêîå coding style è êàêèå îíèáûâàþòÂíèìàòåëüíûé ÷èòàòåëü ìîã çàìåòèòü, ÷òî ïðàêòè÷åñêè âñå ïðèâåä¼ííûå âûøå ðåêîìåíäàöèè òàê èëè èíà÷å îñòàâëÿþò îïðåäåë¼ííóþ ñâîáîäó äåéñòâèé.
 îñîáåííîñòè ýòî çàìåòíî, êîãäà ðå÷ü èä¼ò î ðàññòàíîâêåñòðóêòóðíûõ îòñòóïîâ: â ñàìîì äåëå, íàäî ëè èñïîëüçîâàòü äëÿ îòñòóïîâòàáóëÿöèþ, èëè æå ëó÷øå áóäåò îòñòóïàòü íà ÷åòûðå ïðîáåëà? Èëè íàäâà? Èëè íà òðè? Ñëåäóåò ëè ñíîñèòü íà ñëåäóþùóþ ñòðîêó îòêðûâàþùóþ îïåðàòîðíóþ ñêîáêó ïîñëå çàãîëîâêà ñëîæíîãî îïåðàòîðà? À ïîñëåçàãîëîâêà ïîäïðîãðàììû? À êàê áûòü, åñëè çàãîëîâîê íå óìåñòèëñÿ âîäíó ñòðîêó? Íó è, êàê ãîâîðèòñÿ, òàê äàëåå.Ñ óâåðåííîñòüþ çäåñü ìîæíî ñêàçàòü òîëüêî îäíî:â ðàìêàõ îäíîéïðîãðàììû ñòèëü îôîðìëåíèÿ äîëæåí âûäåðæèâàòüñÿ ñòðîãîîäèí è òîò æå, òàê ÷òî, åñëè âàñ ïðèãëàñèëè ïðèñîåäèíèòüñÿ ê óæå ñó-ùåñòâóþùåìó ïðîåêòó, âàì ïðèä¼òñÿ ñ÷èòàòü ¾ïðàâèëüíûì¿ òîò ñòèëü,êîòîðûé ïðèíÿò â ýòîì ïðîåêòå, ñêîëü áû íåêðàñèâûì îí âàì íè ïîêàçàëñÿ.
Íî âîò âîïðîñ î òîì, êàêîãî ñòèëÿ ïðèäåðæèâàòüñÿ â ïðîãðàììå,íàïèñàíèå êîòîðîé íà÷èíàåòñÿ ñ íóëÿ, îêàçûâàåòñÿ íå òàê ïðîñò, êàê ìûìîãëè áû îæèäàòü.Ñòîðîííèêè ðàçíûõ ñòèëåé ÷àñòî äîâîëüíî íåòåðïèìî îòíîñÿòñÿ êäðóãèì ñòèëÿì; òàê, Ëèíóñ Òîðâàëüäñ â äîêóìåíòå, îïèñûâàþùåì ñòèëüäëÿ ÿäðà Linux, íàçûâàåò ¾åðåòè÷åñêèì äâèæåíèåì¿ ñòîðîííèêîâ ðàçìåðà îòñòóïîâ, îòëè÷íîãî îò òàáóëÿöèè, à ðóêîâîäñòâà ïî îôîðìëåíèþêîäà GNU ïðåäëàãàåò â êà÷åñòâå ñèìâîëè÷åñêîãî æåñòà ðàñïå÷àòàòüíà ïðèíòåðå, ïîñëå ÷åãî ñæå÷ü íå ÷èòàÿ. òàêîé îáñòàíîâêå âàæíî óìåòü ïðîâåñòè ÷åðòó ìåæäó òðåáîâàíèÿìè, ïîä êîòîðûìè åñòü ðàöèîíàëüíàÿ îñíîâà, è òðåáîâàíèÿìè, ïðîäèêòîâàííûìè ëè÷íûìè ïðèñòðàñòèÿìè.
Ñïîðû ñòîðîííèêîâ ðàçíûõ ñòè33ëåé ÷àñòî íàçûâàþò ¾ñâÿùåííûìè âîéíàìè¿ (holy wars), ïîä÷¼ðêèâàÿèõ ñõîæåñòü ñ áåññìûñëåííîé âðàæäîé ïðåäñòàâèòåëåé ðàçëè÷íûõ ðåëèãèé. Ïî-âèäèìîìó, ìîæíî ñêàçàòü, ÷òî äîïóñòèìûõ ñòèëåé îôîðìëåíèÿïðîãðàììíîãî êîäà ñóùåñòâóåò äîñòàòî÷íî ìíîãî, è âûáîð êîíêðåòíîãîñòèëÿ ìîæåò çàâèñåòü îò âàøèõ ëè÷íûõ âêóñîâûõ ïðåäïî÷òåíèé, ëèáîîò âêóñîâûõ ïðåäïî÷òåíèé ðóêîâîäèòåëÿ ðàçðàáîòêè. Åñëè ðå÷ü èä¼ò îâûáîðå îäíîãî èç íåñêîëüêèõ äîïóñòèìûõ ñòèëåé îôîðìëåíèÿ, íå ñòîèò áûòü êàòåãîðè÷íûì è îòñòàèâàòü ¾ñâîé¿ ñòèëü äî ïîáåäíîãî êîíöà;òàê, àâòîð ýòèõ ñòðîê â ñâî¼ âðåìÿ äîñòàòî÷íî áåçáîëåçíåííî ïåðåøåë îòèñïîëüçîâàíèÿ â êà÷åñòâå îòñòóïà äâóõ ïðîáåëîâ ê èñïîëüçîâàíèþ ÷åòûð¼õ, à òàêæå íåîäíîêðàòíî ïðàâèë ïðîãðàììû, èñïîëüçóþùèå òàáóëÿöèþ(ïðèäåðæèâàÿñü, åñòåñòâåííî, îñíîâíîãî ñòèëÿ ïðîãðàììû).Ñêàçàííîå íå îçíà÷àåò, ÷òî ëþáîé ñòèëü èìååò ïðàâî íà ñóùåñòâîâàíèå.
Ýòî êàòåãîðè÷åñêè íå òàê. Âàæíî ïîíèìàòü ðàçíèöó ìåæäó äîïóñòèìûìè îñîáåííîñòÿìè ñòèëÿ è îñîáåííîñòÿìè íåäîïóñòèìûìè. Èíòåðåñíî,÷òî äàæå íàëè÷èå çíà÷èòåëüíîãî ÷èñëà ïðîãðàììèñòîâ, èñïîëüçóþùèõòîò èëè èíîé ñòèëü, íå äåëàåò åãî äîïóñòèìûì.  ñëåäóþùèõ ãëàâàõ ìûíàìåðåííî ïîñòàðàåìñÿ ïðè èçëîæåíèè êàæäîãî êëþ÷åâîãî ìîìåíòà ïîêàçàòü íàðÿäó ñ äîïóñòèìûìè ïðèìåðàìè òàêæå è ïðèìåðû îøèáî÷íîãîïîäõîäà ê îôîðìëåíèþ; êàê ÷èòàòåëü óæå ìîã çàìåòèòü, òàêèå ïðèìåðûìû ïîìå÷àåì ñîîòâåòñòâóþùèì çíàêîì íà ïîëÿõ.34Ãëàâà 2Ïðîöåäóðíûé êîä:Ïàñêàëü, Ñè, Ñè++ßçûêè ïðîãðàììèðîâàíèÿ Ïàñêàëü, Ñè è Ñè++ èìåþò ìåæäó ñîáîéìíîãî îáùåãî.
Ïðè îáñóæäåíèè îôîðìëåíèÿ êîäà íàñ ïðåæäå âñåãî èíòåðåñóþò ñëåäóþùèå îñîáåííîñòè, ïðèñóùèå âñåì ýòèì ÿçûêàì.1. Ïåðå÷èñëåííûå ÿçûêè îòíîñÿòñÿ ê êëàññó èìïåðàòèâíîïðîöåäóðíûõ; ýòî îçíà÷àåò, âî-ïåðâûõ, ÷òî àëãîðèòì íà ýòèõÿçûêàõ çàïèñûâàåòñÿ â âèäå ïîñëåäîâàòåëüíîñòè äåéñòâèé, è, âîâòîðûõ, ÷òî âî âñåõ ýòèõ ÿçûêàõ ïðèñóòñòâóþò ïîäïðîãðàììû, òîåñòü îáîñîáëåííûå àëãîðèòìû, èñïîëíÿþùèå òî èëè èíîå (âîîáùåãîâîðÿ, ñêîëü óãîäíî ñëîæíîå) äåéñòâèå, êîòîðîå áëàãîäàðÿ èõñóùåñòâîâàíèþ ìîæíî ðàññìàòðèâàòü êàê îäèí øàã àëãîðèòìà.2. Âî âñåõ ïåðå÷èñëåííûõ ÿçûêàõ îñíîâíîé åäèíèöåé çàïèñè àëãîðèòìà ÿâëÿåòñÿ îïåðàòîð 1 , ïðè÷¼ì îïåðàòîðû áûâàþò ïðîñòûå è ñëîæíûå; ïîä ñëîæíûì ìû ïîíèìàåì òàêîé îïåðàòîð, â ñîñòàâ êîòîðîãîâõîäÿò äðóãèå îïåðàòîðû (îäèí èëè áîëüøå), êîòîðûå â ñâîþ î÷åðåäü ìîãóò áûòü êàê ïðîñòûìè, òàê è ñëîæíûìè.1 Èñõîäíûé àíãëèéñêèé òåðìèí ¾statement¿ áûëî áû ïðàâèëüíåå ïåðåâåñòè êàê¾óòâåðæäåíèå¿, òåì áîëåå ÷òî ñëîâîì ¾îïåðàòîð¿ â ìàòåìàòèêå îáîçíà÷àåòñÿ îòîáðàæåíèå, ò.å.
íåêàÿ ôóíêöèÿ, à íå äåéñòâèå. Èñòîðèÿ íå ñîõðàíèëà èìåíè òîãî íåäàëüíîâèäíîãî ïåðåâîä÷èêà, êîòîðîìó ìû îáÿçàíû òàêèì çíà÷åíèåì òåðìèíà ¾îïåðàòîð¿â ðóññêîì ÿçûêå, à ðàâíî è âñåé òîé íåðàçáåðèõîé, êîòîðàÿ â èòîãå èç ýòîãî ïîëó÷èëàñü, â îñîáåííîñòè â ñâÿçè ñ ïîÿâëåíèåì êëþ÷åâîãî ñëîâà operator â Cè++. Òàê èëèèíà÷å, ñëîâî ¾îïåðàòîð¿ â ðóññêîÿçû÷íîé ïðîãðàììèñòñêîé ëåêñèêå ÿâëÿåòñÿ óñòîÿâøèìñÿ íàêðåïêî, íî íåîáõîäèìî ïîìíèòü, ÷òî ýòîò òåðìèí ÿâëÿåòñÿ ïåðåâîäîì ñëîâà¾statement¿, òîãäà êàê àíãëîÿçû÷íîå ¾operator¿ ïðàâèëüíåå ïåðåâîäèòü êàê ¾îïåðàöèÿ¿, õîòÿ ýòî è íå ïåðåäà¼ò òî÷íîãî ñìûñëà.353.
Âñå ïåðå÷èñëåííûå ÿçûêè âêëþ÷àþò â ñåáÿ îïåðàòîðû âåòâëåíèÿ (ñíåîáÿçàòåëüíîé else-÷àñòüþ), öèêëà ñ ïðåäóñëîâèåì, öèêëà ñ ïîñòóñëîâèåì è ïàðàìåòðè÷åñêîãî öèêëà, ïðè÷¼ì â áîëüøèíñòâå ñëó÷àåâñèíòàêñèñ ïðåäóñìàòðèâàåò ðîâíî îäèí îïåðàòîð â ðîëè òåëà öèêëà èëè âåòâëåíèÿ (åäèíñòâåííîå èñêëþ÷åíèå çäåñü ïàñêàëåâñêèérepeat/until).4. Äëÿ ñîñòàâëåíèÿ òåëà öèêëà èëè âåòâëåíèÿ èç íåñêîëüêèõ îïåðàòîðîâ èñïîëüçóåòñÿ òàê íàçûâàåìûé ñîñòàâíîé îïåðàòîð, îáðàçóåìûéèç ïîñëåäîâàòåëüíîñòè îïåðàòîðîâ ïóò¼ì çàêëþ÷åíèÿ å¼ â îïåðàòîðíûå ñêîáêè, â êà÷åñòâå êîòîðûõ â Ïàñêàëå èñïîëüçóþòñÿ êëþ÷åâûå ñëîâà begin è end, à â Ñè è Ñè++ ôèãóðíûå ñêîáêè { è }.5.
Ñèíòàêñè÷åñêàÿ êîíñòðóêöèÿ ñîñòàâíîãî îïåðàòîðà òàêæå èñïîëüçóåòñÿ â êà÷åñòâå òåëà ïîäïðîãðàììû, à â Ïàñêàëå åù¼ è â êà÷åñòâå òåëà ¾ãëàâíîé ïðîãðàììû¿.Âñå ïåðå÷èñëåííûå ñõîäñòâà Ïàñêàëÿ è Ñè/Ñè++ ïîçâîëÿþò ñôîðìóëèðîâàòü ïðàâèëà îôîðìëåíèÿ êîäà, îáùèå äëÿ ýòèõ ÿçûêîâ, ÷òî ìûè ïîïûòàåìñÿ ñäåëàòü â ýòîé ãëàâå. Ðàçóìååòñÿ, ïðè âñåõ ñõîäñòâàõ ìåæäó ðàññìàòðèâàåìûìè ÿçûêàìè èìåþòñÿ òàêæå äîâîëüíî ñóùåñòâåííûåðàçëè÷èÿ, êîòîðûì ìû ïîñâÿòèì ñîîòâåòñòâóþùèå ïàðàãðàôû â êîíöåãëàâû.2.1.
Çàãîëîâîê è òåëîÌîæíî âûäåëèòü äâå îñíîâíûå ñèòóàöèè, â êîòîðûõ ðå÷ü èä¼ò î çàè òåëå : ýòî, âî-ïåðâûõ, îïðåäåëåíèå ïîäïðîãðàììû (ôóíêöèèèëè ïàñêàëåâñêîé ïðîöåäóðû), è, âî-âòîðûõ, ëþáîé ñëîæíûé îïåðàòîð.Ïîêà ìû äëÿ ïðîñòîòû êàðòèíû áóäåì ñ÷èòàòü, ÷òî çàãîëîâîê ó íàñ óìåùàåòñÿ íà îäíó ñòðîêó; ÷òî äåëàòü, åñëè çàãîëîâîê ïîëó÷èëñÿ ñëèøêîìäëèííûì, ìû îáñóäèì â 2.5.3.Ïîæàëóé, ñàìûé ïðîñòîé ñëó÷àé ñèòóàöèè ¾çàãîëîâîê-òåëî¿ ìû èìååì äëÿ îïåðàòîðà while; çàìåòèì, ñèíòàêñèñ ýòîãî îïåðàòîðà äëÿ Ïàñêàëÿ è Ñè îòëè÷àåòñÿ ðàçâå ÷òî òåì, ÷òî Ïàñêàëü ïðåäïîëàãàåò ïîñëåóñëîâèÿ ñëîâî do, à Ñè òðåáóåò çàêëþ÷èòü óñëîâèå â ñêîáêè, íî â îñòàëüíîì ýòè ÿçûêè ïðåäîñòàâëÿþò ñîâåðøåííî îäèíàêîâûå îïåðàòîðû öèêëàñ ïðåäóñëîâèåì.
Ìû íà÷èíàåì ñ ðàññìîòðåíèÿ èìåííî ýòîãî îïåðàòîðà,êàê ñàìîãî ïðîñòîãî, íî äàæå íà åãî ïðèìåðå ìîæíî ïðîèëëþñòðèðîâàòüèçðÿäíîå êîëè÷åñòâî ñòåïåíåé ñâîáîäû âûáîðà ñòèëÿ.ãîëîâêå362.1.1. Îñíîâíûå âàðèàíòû ñòèëÿ îòñòóïîâ íà ïðèìåðåîïåðàòîðà whileÍà÷í¼ì ñ òðèâèàëüíîãî ñëó÷àÿ, êîãäà òåëî îïåðàòîðà while ñîñòîèòèç îäíîãî ïðîñòîãî îïåðàòîðà:while p^.data <> x dop := p^.next;while (p->data != x)p = p->next;Êàçàëîñü áû, çäåñü ñ îôîðìëåíèåì âñ¼ ïîíÿòíî; íî è ýòîò òðèâèàëüíûé ñëó÷àé îñòàâëÿåò âîçìîæíîñòü ñäåëàòü äîñòàòî÷íî õàðàêòåðíóþîøèáêó â îôîðìëåíèè òåêñòà.
Äàæå â êîäå, íàïèñàííîì îïûòíûìè ïðîãðàììèñòàìè, ìîæíî âñòðåòèòü ôðàãìåíò, ïîäîáíûé âûøåïðèâåä¼ííîìó,íàïèñàííûé â îäíó ñòðî÷êó:while (p->data != x) p = p->next;Ýòîò ôðàãìåíò íåëüçÿ íàçâàòü àáñîëþòíî íåäîïóñòèìûì, íî, òåì íåìåíåå, èìååòñÿ öåëûé ðÿä ïðè÷èí, â ñèëó êîòîðûõ òàê ïèñàòü íå ñëåäóåò. Ïðåæäå âñåãî, åñëè â ïðîãðàììå â îäíèõ ñëó÷àÿõ òåëî ñëîæíîãîîïåðàòîðà îñòàâëÿþò íà îäíîé ñòðî÷êå ñ çàãîëîâêîì, à â äðóãèõ ñíîñÿòíà ñëåäóþùóþ, òî ÷òîáû óâèäåòü òåëî ïðè áåãëîì ïðîñìîòðå, ïðèä¼òñÿïðèëîæèòü äîïîëíèòåëüíîå (ïóñòü íåçíà÷èòåëüíîå, íî âñ¼-òàêè íåíóëåâîå) óñèëèå: âûÿñíèòü, åñòü òàì ÷òî-òî ïîñëå çàãîëîâêà èëè íåò. Êîíå÷íî,íà ýòî óéä¼ò äîëÿ ñåêóíäû, íå áîëüøå, íî èìåííî èç òàêèõ âîò äîëåé ñåêóíäû è ñêëàäûâàåòñÿ äîïîëíèòåëüíîå óòîìëåíèå ïðè ÷òåíèè ïðîãðàìì.Îäíîãî ýòîãî ñîîáðàæåíèÿ óæå äîñòàòî÷íî, íî åñòü è åù¼ îäíà ïðè÷èíà.Ïðè ïîøàãîâîì âûïîëíåíèè ïðîãðàììû â îòëàä÷èêå, êàê ïðàâèëî, ìèíèìàëüíîé åäèíèöåé ïðîãðàììíîãî êîäà ñ÷èòàåòñÿ ñòðîêà, è ýòî çíà÷èò,÷òî öèêë, çàïèñàííûé â îäíó ñòðî÷êó, âû â îòëàä÷èêå ñìîæåòå ïðîéòè òîëüêî êàê îäèí øàã.