1629295403-b876e2087bddebea4bc9666fb2377a02 (846199), страница 99
Текст из файла (страница 99)
Начинайте имена методов с глаголов( D i s p l a y A l l S t u d e n t s ( ) ) , логические переменные или методы со словнаподобие is или has ( i s V a l i d , h a s l t e m s , c a n P a s t e ) , и делайте все имена понятными и значащими. Не используйте слишком длинных имен. Избегайте применения в именах аббревиатур, в особенности нестандартных.Х о т я в этой книге и используется венгерская нотация (см. главу 3,"Объявление переменных-значений"), с у щ е с т в у ю т и другие соглашения по именованию. Большинство программистов не используют венгерскую нотацию, в которой в качестве префикса применяется указание типа(наподобие s для s t r i n g , d для d o u b l e и так далее). В предыдущемпримере использован другой стиль именования, который вы встречаетев большей части документации и примеров.Пишите короткие методы, которые проще для понимания, менее подвержены ошибкам и легче тестируются.
Везде, где это возможно, работа методадолжна использовать вызовы других методов. Это называется разложениемвашего кода. Если категорически не требуется иного, делайте ваши методы закрытыми. Даже однострочный код стоит выделить в отдельный метод, если этоделает код исходного метода понятнее. Предположим, например, что у вас естьсложное составное логическое выражение, наподобиеi f ( ( y p o s == -1) & (vowelPos == - 1 ) )...Его достаточно сложно понять с первого взгляда. Можно использоватькомментарии для пояснения сути дела, но маленький метод с хорошимименем ничуть не хуже:publicboolHasNoVowels(intintindexOfLetterY,indexOfFirstVowel){return( i n d e x O f L e t t e r Y == -1) &( i n d e x O f F i r s t V o w e l == -1);}504Часть VII.
Дополнительные главы10Этот код (из небольшого переводчика на Pig Latin , который я как-то писал) следует за кодом, который пытается найти первую гласную в целевом слове, если таковая существует. Если е е нет, i n d e x O f F i r s t V o w e l принимает значение - 1 .Однако буква у также может рассматриваться как гласная в некоторых ситуациях,так что этот метод должен принимать во внимание и ее.В методе, вызывающем Н а s N o V o w e l s ( ) , следующая строка гораздо проще дляпонимания, чем исходное логическое выражение:if ( H a s N o V o w e l s ( y p o s ,vowelPos) ){return'USE_WHOLE_WORD;}Данный пример иллюстрируетрефакторинг (реорганизацию кода).Пишите код, который открывает его предназначение.
Например, следующийметод, реализующий алгоритм преобразования английских слов на "поросячью латынь" ("убрать буквы перед первой гласной, перенести их в конец слова и добавить'ау'"), автоматически рассказывает о решаемой задаче даже без комментариев:publicstringConvertToPigLatin(stringreturn GetBackPart(word)+word)GetFrontPart(word)+"ay";Код написан на высоком уровне, с использованием имен методов, которые ясноуказывают их предназначение, не детализируя, как именно они работают —с применением циклов, ветвлений и т.д.
Легко увидеть, как минимум в общем, чтоделает каждый вызов метода. Исходная версия этого метода была полна конструкций i f , циклов, сложных логических выражений и локальных переменных.Алгоритм "поросячьей латыни" прост, но некоторые его составные части несколько запутанны — как, например, поиск первой гласной для разбивки слова. Использование описанного стиля работает сверху вниз (от общего к частному), откладывая детали. Как можно предположить, методы G e t B a c k P a r t () и G e t F r o n t P a r t () написаны одинаково, с явным указанием намерений на каждомшагу и переносом деталей в подчиненные методы.
Многие программы в этой книге можно улучшить посредством этого стиля, либо используя его изначально, либоприбегая к рефакторингу.Можно снизить сложность еще больше, если создать вспомогательные классы, инкапсулирующие часть работы, вместо одного или д в у х классов, тянущих все на себе. Всегда старайтесь инкапсулировать мелкие детали в классах илинаборах методов. В частности, посмотрите, нет ли кода, который может измениться в будущем, и инкапсулируйте его в собственном классе. Моя любимая книга наэту тему — Head First Design Patterns Фриманов (Freeman) (O'Reilly, 2004).Эти и подобные методы помогут вам справиться с величайшей проблемой программирования: управлением сложностью. Плотный, закрученный код трудно понимаем,а это — прямой путь к ошибкам.10"Поросячья латынь" — искажение слов английского языка по определенным правилам;в чем-то аналог знакомого с детства "языка" в стиле "э-чи-то-чи дет-чи-ский-чи я-чи-зык-чи".
—Примеч. ред.Глава 21. Использование интерфейса Visual Studio505Вряд ли вы обладаете настолько феноменальной памятью, чтобы помнить все классы иметоды даже из одного пространства имен, скажем, S y s t e m . Конечно, можно запомнитьсинтаксис С# и несколько других деталей, но все же лучше не забывать о том, как пользоваться справочной системой, поиск нужной информации в которой имеет несколько видов.Окно справочной системы Visual Studio называется D o c u m e n t Explorer. Знание этого факта может помочь избежать определенной неразберихи.F1Помощь по клавише <F1> предоставляет быстрый доступ к информации о полях иликонструкциях в существующем коде, которые вы плохо помните или не вполне понимаете.Например предположим, что вам не понятна разница между оператором n e w и одноименным модификатором метода.
Вы можете щелкнуть на слове n e w в любом местев окне редактирования и нажать <F1>. Visual Studio откроет окно помощи, как показанона рис. 21.10. (Если вы не понимаете разницу между терминами new, см. в главеб,"Объединение данных — классы и массивы", описание оператора new, а^ в главе 12,"Наследование", — наследования new. Или, как видно из приведенной копии экрана,имеется еще ограничение n e w () у обобщенных классов, так что можно заглянутьи в главу 15, "Обобщенное программирование".)Рис.
21.10. Справочная система Visual Studio поможет разобраться с разными значениями ключевого слова newЕсли справка содержит несколько статей, соответствующих вашему термину, вы увидите маленькое плавающее окошко с перечислением доступных тем. Дважды щелкнитена нужной теме, чтобы увидеть ее.506Часть VII. Дополнительные главы-ж• •Visual Studio пытается обеспечить доступ к справочным файлам, инсталлированным на вашем компьютере, и к дополнительным ресурсам Web.
Если вы неподключены к Интернету, то можете получить сообщение о том, что справочной системе не предоставляется доступ в Web.Вы можете выбрать, где будет выводиться окно справочной системы. В VisualStudio выберите команду меню T o o l s ^ O p t i o n s . В разделе E n v i r o n m e n t слеващелкните на пункте Help, G e n e r a l .
Выберите External Help V i e w e r или Integrated Help V i e w e r из S h o w Help Using и щелкните на кнопке О К . Личноя предпочитаю External Help V i e w e r , когда справочная система запускаетсяв виде отдельной программы и не мешает самому Visual Studio. Integrated HelpV i e w e r помещает справку в свернутое окно вместе с вашими исходными файлами. Но попробуйте оба варианта и решите сами, что вам больше нравится.Предметный указательЕсли справка < F 1 > — не то, что вам нужно, пбскольку у вас нет соответствующегоключевого слова или идентификатора, вы можете продолжить поиск в предметном указателе (Index Help).
Предметный указатель наиболее полезен, когда вы знаете тему, которая может вам помочь, но не уверены в деталях.Например, вам может потребоваться коллекция некоторого вида, и при этом известно, что большинство классов коллекций находятся в пространстве именS y s t e m . C o l l e c t i o n s .
Для поиска следует выбрать команду меню H e l p ^ l n d e x , а затем в окне Index ввести collections в поле ввода Look For, что предоставит списоктем, связанных со словом collections. (Этот список находится в левой части окна Help.В правой части выводится текст найденной вами темы.) Двойной щелчок на элементе. N E T F r a m e w o r k в списке тем дает вам окно, показанное на рис.
21.11.Рис. 21.11. Окно предметного указателя особенно полезно, еслиизвестна часть ответа на задаваемый вопросЗатем следует щелкнуть на S y s t e m . C o l l e c t i o n s , и эта тема открывает списокчленов пространства имен C o l l e c t i o n s . При прокрутке списка в нем можно найтикласс S o r t e d L i s t . В соответствии с кратким описанием справа это именно то, чтонужно.
Итак, результаты поиска выглядят так, как показано на рис. 21.12.Рис. 21.12. Найдена информация по определенному классуКаждый член слева в окне тем представляет собой гиперссылку. Щелчок на S o r t e d L i s t открывает информацию об этом классе, включая гиперссылки на члены класса, такчто вы можете легко получить более детальную информацию.Текстовое поле Filtered By в окне Index H e l p позволяет ограничить списоктем, в которых выполняется поиск. На рис. 21.11 и 21.12 поиск велся в рамках"Visual С # " . Без этого ограничения поиск мог бы вернуть информацию о коллекциях, не имеющих ничего общего с С#. Справочная система Microsoft Developer Network (MSDN) существенно больше, чем справка по С#.
Фильтрацияработает для предметного указателя, поиска и содержания.Когда тема показана в окне Help, можно щелкнуть на кнопке S y n c with Tableof C o n t e n t s на панели инструментов (книга с белым кругом, на котором изображены левая и правая стрелки). Это выделит тему на вкладке содержанияC o n t e n t s . Вы можете выполнить прокрутку, чтобы увидеть, что тема, посвященная классу S o r t e d L i s t , находится в Class Library Reference для .NETFramework Software Development Kit (SDK). Вкладка C o n t e n t s полезна для получения обзора информации.Обратите внимание на опцию H e l p F a v o r i t e s в меню Help. Эта вкладка позволяет сохранить тему как "избранную".
Позже вы сможете быстро к ней вернуться. На рис. 21.10показано окно H e l p F a v o r i t e s с некоторыми из избранных тем. Чтобы добавить текущуютему из предметного указателя в список избранного, щелкните на окне темы правойкнопкой мыши и выберите команду A d d to H e l p Favorites.508Часть VII. Дополнительные главыПоискОпция S e a r c h в меню Help наиболее полезна, когда вы в точности не знаете, чтоименно вам нужно. Это полнотекстовый поиск по всем темам справочной системы.Например, требуется коллекция, отсортированная в алфавитном порядке.