Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Visual Basic - Трюки и Хитрости, советы и ответы на вопросы


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

VB Хитрости - советы и ответы на вопросы
06 Апреля 2001
Выпуск подготовил Никита Зимин.
 
Бейсик - это просто?

С детства нас убеждали, что "Бейсик - это просто", что это язык для начинающих. Как он там - "Beginners All-purpose...". Но простота Visual Basic - обманчива. Он далеко не так прост как это кажется на первый взгляд. Попробую объяснить - почему...

Программированию вообще свойственен принцип аналогии, подобия. Причем если не во всем, то во многом. И если в одном месте "это" получается "так", то я всегда ожидаю, что и во всех других подобных случаях "это же" делатется "так же". Этот принцип весьма полезен - как минимум, он экономит время. Как максимум - дает основания считать, что мой опыт (такой как удачная реализация некоторой идеи) не локален, а распространяется на все подобные случаи, которые встретятся мне в будущем.

И это действительно так, но не в отношении Visual Basic. Приведу несколько примеров (может быть не самых лучших, просто те что вспомнились):

  1. Например, коллекция - Collection object. Каждому элементу может соответствовать ключ. Тем самым, элемент доступен по ключу. Но ключ элемента получить нельзя никак! Исключение составляет лишь случай, когда коллекция содержит объекты со свойством Key.
  2. Пресловутая нумерация массивов. Почему-то стандартные контролы используют различное основание нумерации для индексов! В коллекции это 1, в массивах как правило 0. Путаница, однако...
  3. LBound и UBound. Массив может быть пустым. Например: Array() без аргументов возвращает пустой массив. Для него IsArray дает True, но мы не можем взять для него UBound или LBound!
  4. Те из вас, кто начинал использовать Бэйсик версии еще с 4, наверняка замечали некоторую "тормознутость" VB при работе со строками. Например, контектенация нескольких переменных в длинную строку, выполняемая в цикле просто "замораживала" комп. Шло время, вышла пятая версия, потом шестая... Гм, думаете стало работать быстрее? Выглядит будто стало. Однако это только выглядит. Просто процессоры стали на порядок быстрее, что сглаживает эту неприятность. Что же происходит при работе с строками? Происходит разбазаривание ресурсов. Когда вы присоединяете к одной строке другую происходит несколько операций по выделению памяти, те вместо того, чтобы сделать это в одно действие VB производит несколько. Элементарнейщий подход по исправлению - это создавать строку-буфер необходимого размера, а потом "вписывать" в эту строку подстроки замещая буфер .

Этот список можно продолжать еще очень и очень долго. На каждый такой случай можно возразить: вот это обходится вот так, а вот это так, да еще и несколько способов привести. Но что-то уж слишком многое приходится обходить... Раньше меня очень удивляло, откуда берется такая профессиональная гордость у разработчиков, пишуших на VB? Вроде бы бейсик - он и в африке бейсик. Теперь я понимаю и уважаю этих людей, идущих к своей цели несмотря на трудности, подстерегающие буквально на кажом шагу...

Особенно мне понравилось то, какое место в программе на VB занимает WinAPI. Помнится раньше было так: когда нам не хватало средств языка высокого уровня, мы опускались (снисходили) на уровень ассемблера, чтобы самим объяснить процессору - что мы от него хотим. Теперь же, если нет других средств втолковать Windows наши желания, мы переходим на ее родной язык - язык WinAPI.

Поймите меня правильно: я не хочу сказать что VB - это плохой инструмент. Напротив. Разработчиками проведена колоссальная работа. Использование VB вполне соответствует термину Rapid Application Development. Но мне хочется призвать вас к осторожности.

Ну и напоследок - несколько советов:

  • Не делайте предположений, про которые вы можете сказать только "это просто должно быть так". Проверяйте сделанные предположения примерами.
  • На сколько это возможно, придерживайтесь строгого стиля програмиирования. В частности, используйте явное объявление переменных, явное указание типа вместо использования типа Variant.
  • Накапливайте опыт "исключений" VB (подобных приведенным выше) и собирайте библиотеку функций, позволяющих их обойти.
  • Активно используйте все возможные средства, облегчающие отладку, в частности - Debug.Assert. Напишите процедуру, подробнейшим образом показывающую содержимое объекта Err, и используйте везде где возможно возникновение ошибки
  • Используйте On Error Goto во всех критичных местах
Для тех, у кого есть любые вопросы, имеюшие отношение к тематике Visual Basic, хочу порекомендовать место, где на них можно получить ответ. Причем в течении совершенно разумного и небольшего промежутка времени - от нескольких часов до нескольких дней. Место это - конференция RU.Visual.Basic, расположенная на сайте Visual Basic на русском. Для сомневающихся в эффективности такого метода получения ответов, информирую, что за декабрь месяц среднее ежедневное количество сообщений составлило 65 - общее за месяц - 2031.
ВАМ МОЖЕТ ПРИГОДИТЬСЯ ЭТА РАССЫЛКА:
Рассылка "Виртуального города компьютерной документации InfoCity":
Новости "Электронной компьютерной библиотеки InfoCity"

В рассылке Вы найдете обзоры новых электронных книг и статей компьютерной тематики поступивших в библиотеку InfoCity.
Большой выбор компьютрной документации. Грамотно организованная структура библиотеки. Всегда будем рады видеть Вас в нашем виртуальном городе!
Заходите: http://www.infocity.kiev.ua
 

Хочу поставить в известность всех подписчиков этого листа - лист создается в html, а потом автоматом на Ситикоте из него создается текстовый вариант. Так что, если вы, по ошибке, подписались на текстовую версию - рекомендую изменить этот параметр, так как за качество конвертации я не отвечаю, а создавать отдельную версию у меня не хватает времени. Сорри.
 

Борис Рудой,
Visual Basic на русском

 



http://subscribe.ru/
E-mail: ask@subscribe.ru

В избранное