Искусство программирования на Си (984073), страница 8
Текст из файла (страница 8)
Но в список я включил некоторые наиболее странные и наименее известные из зарезервированных идентификаторов. Чтобы еще больше сократить список, я использовал регулярный синтаксис выражений. Здесь [А-2] означает любой символ алфазитз з верхнем регистре; [0-9] означает любую цифру; " (ззездочкз) означает зсе что угодно, и т.д. Итак„без дальнейших рассуждений просто ме ислояьзуйте зти идентификаторы Кроме того, что эти имена слишком длинны и неудобны для набора на клавиатуре, онн еще нарушают правило, в соответствии с которым гарантируется различение только первых 3! символа. Аббревиатуры е]опЬ1з РгзлСЧГ1ЕРсгвгйезозе1ее]егззе доц]язв РгзлтлгзхеегРгяезС1с1еджез конечно, представляют два различных иденуификатора— с точки зрения компилятора, но разве улучшилась их обозримость? Я так не думаю. Такие имена переменных выглядят просто )чкасно! Эти идентификаторы уже смотрятся лучше, пусть даже они несколько длиннее, чем просто аббревиатуры: е]оць1з Ргззелеуз1РзецгвРгоя1сзцгоззг ЬопЬ1в Ргезелеуз1ецсогзвгоеьезезег хотя они все же слегка длинноваты, чтобы быть удоб- ными в использовании.
В таком случае есть смысл про- сто укоротить их пересечения с вами и вторжения в вашу область имен. А ведь было бы хорошо совсем оставить за реализацией формирование области имев! Безопаснее всего не начинать имен идентификаторов с символа подчеркивания. Хотя- конечно символы подчеркивания это хорошая вещь.
Хорошо, что реализации обычно включают защиту вокруг своих заголовков. Но это хорошая вещь и для пользователей-программистов. Прискорбно, но привычка копировать соглашение ХАМЕ Н реализатора становится широко распространенной. (Реализаторы версии компилятора разрешают использовать лидирующие символы подчеркивания. Смысл ограничения состоит в том, чтобы предотвратить конфликт ваших идентификаторов с идентификаторами реализации.) Как бы там ни бьшо, используйте последующие символы подчеркивания, но если вы хотите, чтобы ваша программа была переносимой, не используйте лидирующих символов подчеркивания.
Ниже приведен хороший способ обеспечения включени,я, зац[иуы е[о-э]* е[д-в] !.з[з-з] ьс[д-1]в язв[а-г]* еввввс О[гззхо( гаьзз в]с(а-я! зег]а-г!' Со(а-г!" коз[а-г)* К сожалению, это ведет не только к затруднительному произношению имен, но и делаег задачу изменения типа переменной значительно более сложной. В Ьу~пдочуз 3.! тип гп! имеет размер ]6 Он~он. Если вы начнете с типа [пс, но обнаружите (после придания этого ]пс тридцати или сорока функциям в качестве форматьного параметра), что тип [вс, в конце концов, недостаточно велик для ваших целей, то должны будете изменить не только тип переменной, но и ее имя — во всех тридцати или сорока функциях! Венгерская нотация впала в немилость у всех, за исключением нескольких особо упорных ЬУ[пдозиз-программистов, поскольку для ннх это было непрактично.
(Это реплика для 30 или 40 сердгпых сетевиков во всем мире, ко~орые уверяют меня, что венгерская нотация по-прежнему используется и многимн любима.) Нет сомнений, что в сети имеется несколько сайтов, гле она продолжает существовать, но большинство людей отказались от нее. Писать префиксы, вообще, — плохая Пертмотренаыо юыа С И~ Часть ! гееегп Теаг В 4 == 0 44 (Теаг В 100 1= 0 ) / Теаг В 400 == 0)> ) является визуальным ключом и притом высокоэффек- тивным. Именование функций Я изменил ее следующим образом: 4 == 0; 4 == 0 ьь ! 0 ( ( Теаг В 400 == О! гурмо!ее Ьпг ( т РГ азтс) (сваг в) часто для описания указателя, ее лучше не использовать в качестве счетчика цикла. В графических программах нередко можно увидеть циклы, управляемые переменными х и у.
Для более постоянных переменных следует использовать более осмысленные имена, н очень ва:кно хорошо подобрать эти имена (фактически я действительно верю, что выбор хороших имен для идентификаторов является одним из наиболее важных и сложных аспектов программирования вообще). Для псременныл, представляющих свойства (такие, как цвет, высота, соотношение и т.п.), лучше всего использовать соответствующее существительное, Иногда вам потребуется квалификатор, такой как ВаскСо>ог или ЕогеСо>ог.
Переменные, представляю>цие булевы состояния, должны носить имена, отражающие их текущее состояние. Имеется большое искушение использовать для атой цели слово "(5". Это можно делать, если вы используете локальныс переменные. Таким образом, не общности Например, МА>Ч (человек) — более подходящее имя типа, чем ЯМО(Ч (Симон), а для большинства прило;келий еще лучше использовать просто РЕЕВО)Ч (лицо). Иногда для упрощения объявления вам захочется использовать туре!>еГ. В таких случаях именование все еше важно, но уже менее важно, чем то, что имя должно быть легкочитаемым су>десгвитсльным.
Имя должно меньше всего отражать смысл типа. Давайте, например, определим указатель на массив из 25 указателей на функцию, принимающую тнп йопме, и указатель на функцию, принимающую сйаг * и возвращающую тип ш(, а также возвращающую >и( (!). Массив будет использоваться, скажем, для расчетов закладных. Прежле всего давайте определим псевдоним типа для указателя на функцию, принимающую сйаг и возвращающую йп: Войны стандартовнрограмиировонингнрининыиаутинереаириа ЩЯВ Глава 2 Правильное именование ф>нкций действительно очень ьпе геьеартеаг (зпг теаг) важно.
Хорошие имена функций могут значительно ( улучшить читабельность программы, а недостаточно тшагеепгп Теаг В тельно подобранные имена для функций могут сильно гееегп Теаг В затемнить ясную с других точек зрения программу. (Теаг В 100 Функция предназначена для выполнения, каких-то > действий, так что кажется вполне естественным в ее имя Так почему же а изменил ее! Я бы а жизни не еспомввести глагол Кроме того, функции редко существуют нил.
Я даже вызвал коллегу, который работал на том же в вакууме, сами по себе. Функция не просто выполня- самом модуле; вместе мы начали просматриеать код и ет какие-то действия, но н делает это с определенной провозились целый час (честно!), и, когда мы были тольцслью. Если это так, было бы хорошо включить в на- ио на шаг от решения, мне стало «азатьса, что а внес звание функции соответствующее существительное совершенно бессмысленное изменение. Таким образом, например,а(геру Π— хорошее имя для Затем наконец я заметил, что е самом начале иода а написал наной-го комментарий.
Из него следовало, что функция Ььеаруеаг Н еызыеалась обычно с дауицифро- Я лично предпочитаю такую форму имени функции —, ф>' Ппрпгмомроннылпоып С Воипыгп~андармоо программиропаниигприпины о прио оорпмирип Часть! Глава 2 (Можно, однако, писать код, выполняя форматирование, и, во всяком случае, некоторые редакторы уже могут делать это за вас.) Иногда проблему сопровождения блочных комментариев можно обойти, например, так: Лао (раЕЬ); // работает мк С: 1итдРРЬпх (рапп) г Ькк (ркЕЬ] г Эти комментарии локументируют механизм, но не намерения программиста. Значительно лучше комментировать сразу несколько строк кода: блока операторов, становятся просто бессмысленно ав- торитарными: Далее комментарий удаляется препроцессором, и, таким обраюм, функция Ьвх О вообще никогда не будет вызвана. Это — порочная ошибка и, по моему глубокому убеждению, достаточная причина для того, чтобы вообще не использовать комментарии типа //.
Но, конечно, вы должны составить свое собственное мнение на этот счет. 1С (р= -> ( агап = ввс; ++р; /* комам блока хя (р =- ' †') / /* обработать ьтоп о клиакть и сделать текупппп сльдуппаато клитита */ Садр *1зве; *ййас = (п11ас) -> ПЕХСГ чпу (б ел е , е ир -> бьем, ма*а л *б е ре ); /****************о****о********оп******* Это бпочамй коммеатарвй с удапеавой с правой сторовм колонкой звездочек. — делать это явно глупо.
Не "закомментируйтек код Такой комментарий намною лучше — когда мы решим удалить список и использовать вместо него простои массив, нам не придется переписывать комментарий. Когда комментарии излишни и по*поп*поп и и * * *и* ° ппп ° и/ Как вы думаете, откуда взят приведенный здесь ком ментарий? Так намного лучше, поскольку у вас уже есть почти все звезлочки и преимушества привлекающего внимание блока.
Некоторые используют полностью минимизированный блок: хоп г /» добавить 1 к 1 и/ Если вы ответили: "из маленькою блока", то получаете шесть очков. Если вы ответили: "из учебника по С", то получаете десять очков и бесплатный виноград (пока запасы не иссякли; у меня естд только одна кисть, /* это бпочвмй коммеатармй с удалеавммв справа, слева, сверху а сввзу рядамв звездочек. ' Ю,";,=' У Э и'', " '-",.„',~,',",От';;""; „',. ", "-,";,='; Э .'а "-;"- ' ',"";", 'а "-;"-' '; "; а",;,=' У ';,"" оп ",;;;-' ':""...,," '"- "" =" " Э ""' '"- '' З '„"".;';ига' ""; ' .„', ". ".,; ',';,:":' ':; ' " '„.'..," „' .„', ". ".,; 'Кгт,: Гп Г,, '-',.