ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 11.12.2025

Просмотров: 3146

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Метод U n i v e r s i t y . T o S t r i n g () выводит название университета, гимн и имена всех студентов. Он делает это путем создания итератора, метод M o v e N e x t () которого применяется для перехода от одного элемента списка к другому, получая каждый эле­ мент посредством свойства C u r r e n t . Поскольку класс S o r t e d L i s t , в котором хра­ нятся студенты, представляет собой словарь, итератор возвращает не сохраненные объ­ екты, а записи из словаря (объекты класса D i c t i o n a r y E n t r y ) , содержащие объект вместе с ключом, применяемым для сортировки. Обратите внимание на использованные преобразования типов.

Коллекции и их итерирование описаны в главах 15, "Обобщенное программирова­ ние", и 20, "Работа с коллекциями". Здесь вместо синтаксиса M o v e N e x t () можно применить блок итератора, рассмотренный в предыдущей главе, а можно восполь­ зоваться циклом f o r e a c h :

f o r e a c h ( D i c t i o n a r y E n t r y d e i n s t u d e n t s )

{

S t u d e n t s t u d e n t = ( S t u d e n t ) d e . V a l u e ; s + = s t u d e n t . T o S t r i n g ( ) + " \ n " ;

}

Как вы вскоре убедитесь, цикл f o r e a c h предпочтительнее.

Преобразование классов в программу

Классы S t u d e n t и U n i v e r s i t y не образуют программу. Консольное приложение начинается со статического метода M a i n ( ) . Этот метод может быть в любом классе, однако по умолчанию он находится в классе P r o g r a m .

Содержимое исходного файла P r o g r a m , cs изменено следующим образом:

/ / V S I n t e r f а с е - д е м о н с т р а ц и о н н а я п р о г р а м м а , с о с т о я щ а я и з

/ / н е с к о л ь к и х к л а с с о в . К л а с с ы S t u d e n t и U n i v e r s i t y н а х о д я т с я

/ / в с в о и х с о б с т в е н н ы х и с х о д н ы х ф а й л а х .

 

/ / Ф а й л P r o g r a m . c s

 

 

 

u s i n g

S y s t e m ;

 

 

 

 

n a m e s p a c e

V S I n t e r f a c e

 

 

 

{

 

 

 

 

 

 

c l a s s

P r o g r a m

 

 

 

 

{

 

 

 

 

 

 

s t a t i c

v o i d

M a i n ( s t r i n g [ ]

a r g s )

 

{

 

 

 

 

 

 

U n i v e r s i t y

u n i v e r s i t y

=

 

 

 

n e w U n i v e r s i t y ( " И н с т и т у т с л у ч а й н ы х н а у к " ) ;

u n i v e r s i t y . E n r o l l ( n e w

S t u d e n t ( " D w a y n e " ,

1 2 3 4 ) ) ;

u n i v e r s i t y . E n r o l l ( n e w

S t u d e n t ( " M i k e y " ,

1 2 3 5 ) ) ;

u n i v e r s i t y . E n r o l l ( n e w

S t u d e n t ( " M a r k " ,

1 2 3 6 ) ) ;

C o n s o l e . W r i t e L i n e ( u n i v e r s i t y . T o S t r i n g ( ) ) ; C o n s o l e . W r i t e L i n e ( ) ;

/ / О ж и д а е м п о д т в е р ж д е н и я п о л ь з о в а т е л я

C o n s o l e . W r i t e L i n e ( " Н а ж м и т е < E n t e r > д л я " +

" з а в е р ш е н и я п р о г р а м м ы . . . " ) ;

Глава 21. Использование интерфейса Visual Studio

501


C o n s o l e . R e a d ( ) ;

}

}

}

При компиляции программы файл проекта говорит Visual Studio о том, что в одну программу следует объединить все три ф а й л а — U n i v e r s i t y . c s , S t u d e n t . c s и P r o g r a m . c s .

При выполнении программы выводится простой (но отсортированный!) список сту­

дентов:

 

И н с т и т у т

с л у ч а й н ы х н а у к

С п и с о к

с т у д е н т о в :

D w a y n e

( 1 2 3 4 )

M a r k

( 1 2 3 6 )

M i k e y

( 1 2 3 5 )

P r e s s

E n t e r t o t e r m i n a t e . . .

Программы в этой книге написаны так, чтобы максимально сэкономить бумагу. До­ полнительные пустые строки опущены, код, который не представляет непосредственный интерес для рассматриваемой темы, зачастую тоже, а оставшийся в основном линейно организован. Должен ли любой ваш код выглядеть таким образом?

Далее приводится несколько рекомендаций по написанию кода, который легко читать (человеку), обновлять, сопровождать и тестировать, и который хорошо организован в концептуальном смысле.

Используйте дополнительные пробелы и пустые строки. Избегайте излишнего сжатия кода, которое наблюдается в настоящей книге. Вот класс S t u d e n t , пере­

писанный в более свободном формате:

 

/ / V S I n t e r f а с е

- ф а й л S t u d e n t . c s

 

/ / S t u d e n t

- м о д е л и р о в а н и е

с т у д е н т а , к о т о р ы й в с о с т о я н и и

сам

/ / н а п и с а т ь

с в о е и м я

 

 

# r e g i o n

U s i n g

D i r e c t i v e s

 

 

u s i n g

S y s t e m ;

 

 

 

# e n d r e g i o n

U s i n g D i r e c t i v e s

 

n a m e s p a c e

 

V S I n t e r f a c e

 

 

{

 

 

 

 

 

 

III

< s u m m a r y >

 

 

 

/ / / S t u d e n t - у ч а щ и й с я ш к о л ы

 

/ / /

< / s u m m a r y >

 

 

p u b l i c

c l a s s

S t u d e n t

 

 

{

 

 

 

 

 

 

# r e g i o n

P r i v a t e D a t a

F i e l d s

 

/ / И м е н а п е р е м е н н ы х н а ч и н а ю т с я с о с т р о ч н о й б у к в ы ,

н о

502

Часть VII. Дополнительные главы


/ /

с л о в а в н у т р и и м е н и п е р е м е н н о й н а ч и н а ю т с я с п р о п и с н ы х

/ /

б у к в

p r i v a t e

s t r i n g

s S t u d e n t N a m e ;

 

 

p r i v a t e

i n t

n I D ;

 

 

 

# e n d r e g i o n

P r i v a t e D a t a

F i e l d s

 

 

# r e g i o n C o n s t r u c t o r s

 

 

 

/ / S t u d e n t - к о н с т р у к т о р и и м я к л а с с а н а ч и н а ю т с я с

/ / п р о п и с н о й б у к в ы , к а к и в с е с л о в а в н у т р и и м е н и

 

p u b l i c S t u d e n t ( s t r i n g s S t u d e n t N a m e ,

i n t n I D )

 

{

 

 

 

 

 

 

t h i s . s S t u d e n t N a m e = s S t u d e n t N a m e ;

 

 

t h i s . n I D = n I D ;

 

 

 

}

 

 

 

 

 

 

# e n d r e g i o n

C o n s t r u c t o r s

 

 

 

# r e g i o n P u b l i c M e t h o d s

a n d P r o p e r t i e s

 

/ / / < s u m m a r y >

 

 

 

 

/ / / N a m e - и м я у ч а щ е г о с я

 

 

/ / / < / s u m m a r y >

 

 

 

 

p u b l i c s t r i n g N a m e { g e t { r e t u r n s S t u d e n t N a m e ; }

}

/ / / < s u m m a r y >

 

 

 

 

/ / / T o S t r i n g - в о з в р а щ а е т и м я и и д е н т и ф и к а т о р

 

/ / / < / s u m m a r y >

 

 

 

 

p u b l i c

o v e r r i d e

s t r i n g

T o S t r i n g ( )

 

 

{

 

 

 

 

 

 

r e t u r n S t r i n g . F o r m a t ( " { o } ( { l } ) " ,

s S t u d e n t N a m e ,

n I D ) ;

}

 

 

 

 

 

 

# e n d r e g i o n P u b l i c M e t h o d s a n d P r o p e r t i e s

 

}

}

Используйте директивы Visual Studio # r e g i o n и ttendregion для отделения разделов вашего кода. Это позволит сворачивать и скрывать разделы при работе над другими частями кода. Нажмите <Ctrl+M>, а затем <Ctrl+0>, чтобы переклю­ читься между свернутым и развернутым состоянием. Давайте вашим разделам описательные имена, такие как показаны в приведенном листинге.

Используйте XML-комментарии, начинающиеся с / / / . Данные символы по­ зволяют Visual Studio применять их в механизме автозавершения, выводя коммен­ тарии как документацию по данному методу прямо в окне кода при вызове одного из ваших собственных методов. Механизм автозавершения рассматривался в гла­ ве 8, "Методы класса", и является одним из простейших способов получить спра­ вочную информацию о методе или классе — в том числе и по вашим собствен­ ным, если вы используете XML-комментарии.

Глава 21. Использование интерфейса Visual Studio

503



Вы можете также воспользоваться инструментом N D o c с открытым кодом ( h t t p : / / n d o c . s o u r c e f o r g e . n e t ) и автоматически сгенерировать привлекательную документацию в стиле Visual Studio на основании ваших XML-комментариев.

Комментируйте код, но делайте комментарии значимыми. Хороший комментарий рассказывает о ваших намерениях и назначении кода, а не о механике их реализации. Например, не пишите так:

/ /

Ц и к л п о м а с с и в у с т у д е н т о в с в ы з о в о м м е т о д а D i s p l a y для

/ / к а ж д о г о о б ъ е к т а т и п а S t u d e n t .

Вместо этого достаточно написать:

/ /

В ы в о д и н ф о р м а ц и и о с т у д е н т а х .

Посмотрите на имена методов или классов, которые собираетесь комментировать, и подумайте, нельзя ли их переименовать так, что­ бы комментарии стали излишни. Метод D i s p l a y A l l S t u d e n t s () не требует никаких комментариев.

Используйте хорошие описывающие имена для переменных, методов, классов и прочих объектов. Начинайте имена методов с глаголов ( 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 ) & ( v o w e l P o s = = - 1 ) ) . . .

Его достаточно сложно понять с первого взгляда. Можно использовать комментарии для пояснения сути дела, но маленький метод с хорошим именем ничуть не хуже:

p u b l i c b o o l H a s N o V o w e l s ( i n t

i n d e x O f L e t t e r Y ,

i n t

i n d e x O f F i r s t V o w e l )

{

r e t u r n ( 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. Дополнительные главы