Мудрость
программером
Олег ВОРОНИН
г
Давать советы
неблагодарное занятие. Советы никогда никто не слушает. Однако, рискну. Меня
несколько удивляет, как много задач программисты решают «в лоб», не заботясь ни о простоте
решения, ни о скорости его выполнения, ни о стиле. Постараюсь дать несколько советов, как новичкам,
так и тем, кто поопытнее.
П рограм м ирование компью теров м ож ет свести с ума.
Д ругие проф ессии даю т Вам прекрасны е возможности
наблюдать осязаемые результаты Ваших усилий.
Часовщ ик м ож ет смотреть на свои зубчики и колесики,
швея — на швы, ровно ложащ иеся после каждого взмаха
иглы. Н о програм м ист проектирует, строит и рем онтирует
нечто воображ аем ое, призрачные механизмы,
ускользаю щ ие о т восприятия органам и чувств
Н аш а р а б о та происходит не в О ЗУ, не в программе-
редакторе, а внутри наш ей головы.
Л. Броуди. С пособ мышления — Ф орт.
Совет первый
( и
главный). Все гениальное
просто.
О
б ы ч н о
с а м о е
п р о с т о е
р е ш
е н и е
з а д а ч и
с а м о е
п р а в и л ь н о е . П р о с т о е р е ш
е н и е ч а щ е в с е г о н а й т и т р у д н е е ,
н о е г о в с е г д а л е г ч е п о н я т ь , а п о н я в — р е а л и з о в а т ь . Н о н а
э т о м д е л о
н е
о с т а н а в л и в а е т с я .
П р о г р а м м ы
н а д о
е щ е
и
о т л а ж и в а т ь , п о д д е р ж и в а т ь и и з м е н я т ь в у г о д у т р е б о в а н и я м
п о л ь з о в а т е л е й . П р о с т о е р е ш е н и е о б ы ч н о б о л е е э ф ф е к т и в н о
и
м е н ь ш
е
в
о б ъ е м е .
В
к о н ц е
к о н ц о в ,
о н о
д о с т а в л я е т
у д о в о л ь с т в и е . Ч т о - т о щ
е л к а е т в г о л о в е , и т ы п о н и м а е ш ь —
д а , э т о О
Н
О
. Р а д и э т о г о с т о и т п р о г р а м м и р о в а т ь .
Расчвты/таблицы/лоеика
П р е д п о л о ж и м , н а м н у ж н о н а п и с а т ь к о д , р е ш а ю щ
и й т а к у ю
з а д а ч у :
У е с л и в х о д н о й а р г у м е н т х р а в е н 7, н а в ы х о д е у.=25;
■У
е с л и
х р а в е н 2, у:=30;
У е с л и х р а в е н 3, у:=35.
М
о ж н о в ы б р а т ь о д и н и з т р е х п о д х о д о в :
Расчет:
у:=х*5+20;
Таблицы:
const
tab:array[1.
.3] of integer=(25,30,35)
у:=tab[x];
Л огика:
case x of
l:y:=25;
2:y:=30;
3:y:=35;
end;
Д л я д а н н о й з а д а ч и вы числение р е з у л ь та та — с а м о е п р о с т о е
р е ш е н и е . О д н а к о о н о н е с а м о е б ы с т р о е .
С а м о е
б ы с т р о е
р е ш
е н и е —
табличное. О ч е н ь ч а с т о
в ы ч и с л е н и е с и н у с о в
и
к о с и н у с о в з а м е н я е т с я
в ы б о р к о й
и з
т а б л и ц ы
д л я
д о с т и ж е н и я
с к о р о с т и .
И
в о
м н о г и х с л у ч а я х
и с п о л ь з о в а т ь т а б л и ц у п р о щ е ,
ч е м п р и д у м а т ь ф о р м у л у д л я
в ы ч и с л е н и я р е з у л ь т а т а , с п о м о щ ь ю к о т о р о й э т о т р е з у л ь т а т
м о ж е т б ы т ь в ы ч и с л е н . И с т о и т з а д а ч е ч у т ь - ч у т ь и з м е н и т ь с я —
н а п р и м е р , в п е р в о м в а р и а н т е в м е с т о 2 5 н у ж н о п о л у ч и т ь 2 6 , —
н у ж н о
п р и д у м ы в а т ь
ф
о р м у л у
з а н о в о
( е с л и
э т о
в о о б щ
е
в о з м о ж н о ; в з а д а ч е с л у ч а й т р и в и а л е н , и п о д о б р а т ь ф о р м у л у
л е г к о ) . П р и и с п о л ь з о в а н и и т а б л и ц н у ж н о в с е г о л и ш ь п о м е н я т ь
в т а б л и ц е о д н о ч и с л о .
Ч т о к а с а е т с я в а р и а н т а л о ги ки , о н о о б ы ч н о с а м о е м е д л е н н о е
и о ч е н ь б ы с т р о
р а з р а с т а е т с я
п р и у в е л и ч е н и и
к о л и ч е с т в а
в а р и а н т о в .
Минимизация условных операторов
Совет второй. Выбирайте один из трех подходов к решению
задачи в таком порядке:
У расчеты (кроме случаев, когда нужна скорость);
У таблицы;
У логика
И с п о л ь з о в а н и е
условных операторов у с л о ж н я е т в а ш к о д
П р и ч е м , о н и м е е т т е н д е н ц и ю о ч е н ь б ы с т р о р а з р а с т а т ь с я в
р а з м е р а х . И н о г д а о ч е н ь с л о ж н о б ы в а е т р а з о б р а т ь с я в о в с е х
м н о г о к р а т н ы х в л о ж е н и я х
if'oB,
e l s e и t h e n . К р о м е т о г о , у с л о в н ы е
о п е р а т о р ы з а м е д л я ю т в ы п о л н е н и е п р о г р а м м ы .
К о н е ч н о , и з б е ж а т ь у с л о в н ы х о п е р а т о р о в п о ч т и н е в о з м о ж н о ,
н о м а к с и м а
п р о г р а м м и с т а т а к о в а :
п о
к а ж д о м у
if'y
з а д а т ь
с е б е в о п р о с : « Ч т о я д е л а ю н е т а к ? »
Совет третий. Не проверяйте то, что уже проверяли.
В о з ь м е м п р и м е р , д а н н ы й в н а ч а л е с т а т ь и , и з а п и ш е м е г о
о п е р а т о р а м и
if :
if х=1 theny:=25;
if x=2 theny:=30;
if x=3 then у: =35;
Ч т о - т о з д е с ь н е т о . В к а ж д о м с л у ч а е в ы п о л н я ю т с я в с е т р и
п р о в е р к и . Е с л и х = 7 , з а ч е м п р о в е р я т ь в а р и а н т ы 2 и 3 ? В м е с т о
э т о г о н у ж н о с д е л а т ь в л о ж е н н ы е п р о в е р к и :
if х=1 then у: =25
else if х=2 then у: =30
else if х=3 then у:=35;
Совет четвертый. Объединяйте условия вместе.
М
н о г и е
в л о ж е н н ы е
с т р у к т у р ы
if .
.. then
у п р о щ
а ю т с я
п о с р е д с т в о м о б ъ е д и н е н и я у с л о в и й с п о м о щ
ь ю л о г и ч е с к и х
о п е р а т о р о в . Н а п р и м е р :
if есть_деньги на счету then
if последний день месяца then
получить_зарплату;
В м е с т о и с п о л ь з о в а н и я д в у х i f ' o e с к о м б и н и р у е м у с л о в и я с
п о м о щ
ь ю о п е р а т о р а a n d :
if есть_деньги_на_счету and последний_день_месяца
then
получить_з арплату;
Э т о б л и ж е к е с т е с т в е н н о м у я з ы к у и п р о щ
е , о с о б е н н о е с л и
у с л о в и й м н о г о .
О д н а к о и з л ю б о г о п р а в и л а е с т ь и с к л ю ч е н и е . Е с л и п р о в е р к а
н а л и ч и я д е н е г н а
в а ш е м с ч е т у в
б а н к е з а н и м а е т м н о г о
в р е м е н и , л у ч ш е с н а ч а л а
п р о в е р и т ь , к а к о й с е г о д н я д е н ь , и
з а п и с а т ь т а к :
if последний_день_месяца then
if есть деньги на_счету then
получитьзарплату;
З а ч е м
п р о в е р я т ь ,
е с т ь л и
н а
с ч е т у д е н ь г и ,
е с л и
д е н ь
п о л у ч е н и я з а р п л а т ы е щ е н е н а с т у п и л ? С м о т р и т е т а к ж е пяты й
совет.
Примечание:
м н о г и е с о в р е м е н н ы е к о м п и л я т о р ы п о з в о л я ю т
г е н е р и р о в а т ь к о д , о п т и м и з и р у ю щ и й в ы п о л н е н и е о б ъ е д и н е н н ы х
у с л о в и й .
Н а п р и м е р ,
е с л и у с л о в и е
есть деньги на счету
д а е т в р е з у л ь т а т е л о ж ь , т о к а к и м б ы н и б ы л р е з у л ь т а т у с л о в и я
последний_день_месяца,
в
р е з у л ь т а т е
п о л у ч и м
ложь, и
в ы ч и с л я т ь в т о р о е у с л о в и е н е н у ж н о б у д е т .
Совет пятый. Если у вас есть условия с разным весом,
вкладывайте условные операторы так, чтобы первым был тот,
М
О
Й К О М П Ь Ю
Т Е Р
предыдущая страница 39 Мой Компьютер 2005 07 читать онлайн следующая страница 41 Мой Компьютер 2005 07 читать онлайн Домой Выключить/включить текст