Visual Basic .NET для чайников - У. Вонг. Visual Basic .NET для чайников - У. Диалектикамосква СанктПетербург Киев
Скачать 7.1 Mb.
|
Глава Борьба с ошибками 225 Источник возникновения ошибки Когда вы определили место, где прячется ошибка, нужно найти ее первоисточник (именно тот код, из-за которого происходит сбой в работе программы). Предположим, программа должна выводить на печать ваше имя, но принтер почему-то печатает информацию о вашем семейном положении. С точки зрения компьютера процесс печати проходит корректно — печатаются те данные, относительно которых была получена команда вывода на печать. Если вы сами немного подумаете, то поймете, что ошибка, вероятнее всего, кроется в ко- де, сохраняющем информацию о вашем имени, или в коде, извлекающем эту информацию из памяти для вывода на печать. Ликвидация ошибок После того как будет найден код, являющийся непосредственным виновником возникно- вения ошибки, останется только его исправить. Но прежде чем это сделать, хорошенько по- думайте! Иногда исправление одной ошибки провоцирует возникновение дюжины других. Чтобы пояснить данную мысль, проведем следующую аналогию. Представьте, что в ва- шем доме начала протекать труба. Можно разрушить стену и полностью заменить трубу. Проблема с водопроводом будет решена, но, ломая стену, вы наверняка повредите перекры- тия и по потолку пойдут трещины. Можно заменить потолок, положив вместо него бетонные плиты. Но это даст дополнительную нагрузку на фундамент, он просядет, и трещины пойдут уже по стенам. Теперь, наверное, легче будет просто построить новый дом. Итак, начав с по- чинки водопровода, можно закончить списанием дома под снос. С программными ошибками может происходить то же самое. Иногда легче просто пере- писать часть кодов программы, чем пытаться выловить из них все ошибки. Лучший способ борьбы с ошибками — не делать их вовсе. Конечно, это примерно то же самое, что сказать: "Чтобы не испытывать недостатка в деньгах, нужно всегда их иметь". Поскольку от ошибок не застрахована ни одна программа, вы можете лишь попытаться свести их количество к минимуму. Вот несколько советов, которые помогут вам в этом. Разбейте программу на много маленьких подпрограмм, каждая из которых бу- дет решать какую-то одну задачу. Чем меньше программа, тем легче найти и удалить ошибки. На этом принципе основано объектно-ориентированное про- граммирование, речь о котором пойдет в седьмой части книги. Тестируйте программу после каждого внесения в нее изменений. Если про- грамма до изменения каких-то двух строк работала корректно, то понятно, что ошибка "сидит" именно в этих строках. Делайте перерывы на отдых. Если программа не работает и вы никак не мо- жете понять в чем дело, оставьте ее на некоторое время и займитесь чем- нибудь другим. Когда вы вернетесь к ней снова, решение проблемы может прийти на ум само собой, и вы даже будете удивлены, как можно было сразу этого не понимать. Программа должна состоять из абсолютно точных инструкций, указывающих компьюте- ру, что нужно делать в тот или иной момент. Если же компьютер попадает в ситуацию, когда не знает, что делать дальше, или если он сталкивается с проблемой, решить которую не в со- стоянии, происходит сбой в работе. Это может выражаться в том, что программа отказывает- 226 Часть Основы создания кодов ся функционировать (она "зависает"), или, в худшем случае, в том, что происходит сбой в работе всего компьютера. Чтобы избежать подобных проблем, Visual Basic предлагает вам возможность соз- дания программных ловушек для ошибок, приводящих к серьезным сбоям в работе програм- мы. Специальный кол говорит компьютеру: "Вот тебе инструкции на тот случай, если воз- никнет ситуация, с которой ты не сможешь справиться". Инструкции могут быть самыми например как те, что указывают на необходимость отобразить на экране сообще- ние. И, конечно же, это лучший вариант, чем перезагрузка компьютера. Простейшая ловушка для ошибок выглядит следующим образом: Try ' Код, р а б о т у нужно п р о т е с т и р о в а т ь C a t c h на случай в о з н и к н о в е н и я ошибок End Try Рассмотрим это на примере: Try Dim intX As Integer irtX = 9 / Catch ("Деление на ноль!") End Try 1. Visual Basic выполняет расположенные между командами Try (первая строка) и Catch (четвертая строка). В данном случае во второй стро- ке создается переменная типа I n t e g e r , а в третьей строке число 9 де- лится на число, которое пользователь набрал в текстовом поле TextBoxl, a полученный результат присваивается переменной intX. 2. Коды, расположенные между командами Catch (четвертая строка) и End Try (шестая строка), выполняются только в том случае, если обнаружится ошибка при выполнении кодов, расположенных между командами Try (первая строка) и Catch (четвертая строка). В нашем примере при возникно- вении ошибки на экране отображается окно с сообщением "Деление на ноль ! ". Вы, наверное, уже догадались, что ошибка может возникнуть, если пользователь наберет в текстовом поле TextBoxl число 0. 3. Шестая строка (End Try) сообщает Visual Basic что на этом коды ло- вушки для ошибок заканчиваются. Если ошибка произойдет при выполнении кодов, расположенных за пределами строк Try-Catch, данная ловушка компьютеру ничем не поможет. Ловушки ошибок сами по себе очень удобны и полезны, поскольку не позволяют компьютеру попасть в безвыходное положение и зависнуть. Благодаря этому вам при отладке программы намного реже придется тянуться к кнопке RESET. Глава Борьба с ошибками 227 Visual и В Visual Basic есть два основных метода, позволяющих выявить и удалить ошибки: пошаговое выполнение программы и просмотр текущих значений. При пошаговом выполнении программы вы построчно отслеживаете производи- мые компьютером действия. Пока программа работает правильно, вы переходите от одной строки к другой. Как только в работе происходит сбой или переменная принимает некорректное значение, вы точно можете сказать, в какой строке со- держится ошибка. Просматривая текущие значения переменных, вы можете видеть, какие данные ис- пользуются на каждом шаге выполнения программы. Как только переменная при- нимает неправильное значение, вы сразу можете локализовать ошибку. Обычно эти два метода используются совместно. Выполняя пошагово программу и про- сматривая принимаемые переменными значения, вы рано или поздно обнаружите ошибку. Пошаговое выполнение программы Если вы совершенно не представляете, где могла спрятаться ошибка, придется пошагово выполнять программу, начиная с самой первой строки. При этом можно использовать одну из трех перечисленных далее команд. выполнение) или клавиша < F 1 1 > — каж- дый раз при выборе этой команды программа выполняет коды одной строки и пе- реходит на другую строку. Коды всех процедур также выполняются пошагово. выполнение с перешагивание через про- цедуры) или клавиша < F 1 0 > — коды программы также выполняются пошагово, но отдельные процедуры выполняются целиком. Если вы уверены, что данная проце- дура не содержит ошибок, выберите эту команду, и вам не придется выполнять пошагово все ее коды. Out из процедуры) или комбинация клавиш — если вы начали пошаговое выполнение процедуры и решили, что в ней ошибок нет, эта команда позволяет быстро завершить ее. Эти три команды можно использовать в любой последовательности. Вначале вы- берите команду Step Into, чтобы начать пошаговое выполнение программы. Затем, если вы вошли в какую-то процедуру и не хотите дальше пошагово выполнять ее, выберите команду Step Out. И, наконец, используйте команду Step Over при не- обходимости "перешагнуть" через процедуру, в правильности выполнения которой вы не сомневаетесь. Вот как следует использовать команды Step Into и Step Over на практике. 1. Выберите команду (или нажмите клавишу либо команду Over (или нажмите клавишу Visual Basic откроет окно с кодами вашей программы, в котором слева от выполняемой в данный момент строки будет отображаться желтая стрелка (рис. 21.1). 228 Часть IV. Основы создания кодов 2. Повторяйте первый шаг для каждой строки, точность выполнения которой вы хотите проверить. Если вы хотите завершить процедуру без пошагового выполнения оставшихся кодов, выберите команду Out. 3. Для того чтобы прервать процесс пошагового выполнения программы, вы- команду Debugging отладку) или нажмите комбинацию клавиш Trojan гее - Microsoft Visual - File ' Program ex Fora} • : j R e a d y guild - - - - • N e w era. ••(t с d a w - - ' * * Г • • J • - - • • o d e C o n t a i n e r с •. * INS 21.1. Visual Basic пошагово выполняет коды вашей программы на отображается пользовательский интерфейс вашей программы, то, чтобы прервать процесс пошагового выполнения ее кодов, можно выбрать команду в таком случае завершается выполнение программы в целом. Определение точек останова Команды Step и Step Over приступают к пошаговому выполнению программы, на- чиная с самой первой строки. Если программа невелика, то в этом нет ничего плохого. Но ес- ли программа большая, у вас не хватит терпения начинать каждый раз сначала (тем более что в этом нет никакой необходимости). Чтобы избежать пошагового выполнения части кодов, которые, как вы надеетесь, работа- ют правильно, используйте точку останова. Точка останова говорит компьютеру: все коды этой точки, а затем жди команду Step или Step для дальнейшего по- шагового выполнения Точка останова создается следующим образом. Глава 21. Борьба с ошибками 229 1. Откройте окно кодов путем нажатия клавиши View Code. 2. Щелкните на строке, где должна быть создана точка останова. 3. Нажмите клавишу Слева от строки, выбранной в качестве точки останова, отобразится большая красная точка. После того как точка останова будет создана, нажмите клавишу (клавиша и Step Over (клавиша Чтобы удалить точку останова, повторите те же три шага, щелкнув на строке, к которой таковая относится. Для того чтобы сразу удалить все точки останова, созданные в вашей программе, нажмите комбинацию клавиш или выберите команду Clear All Breakpoints все точки останова). Просмотр значений переменных Пошаговое выполнение программы может быть по-настоящему полезным, если вы при этом видите, какие изменения происходят с данными. Чтобы иметь возможность отслеживать текущие значения переменных, воспользуйтесь окном Watch (Просмотр). Это окно говорит компьютеру: "Вот переменные, которые меня интересуют. В течение всего процесса пошагового выполнения программы отображай здесь их текущие значения". Чтобы получить возможность пользоваться окном Watch, выполните такие действия. 1. Выберите команду (ей соответствует клавиша или команду Over (клавиша Visual Basic откроет окно с кодами вашей программы. 2. Щелкните правой кнопкой мыши на переменной, значения которой вас ин- тересуют. Откроется контекстное меню. 3. Выберите команду Add Watch (Добавить для просмотра). 4. Выберите команду или нажмите комбинацию клавиш чтобы отобразить на эк- ране окно Watch (рис. 21.2). При пошаговом выполнении программы в окне Watch постоянно будут отобра- жаться текущие значения переменных, выбранных для просмотра. 5. Выберите команду (клавиша Over (клавиша В момент, когда очередная выполняемая строка изменит значение переменной, для просмотра на шаге 2, в окне Watch сразу же отобразится ее новое значение. 6. Выберите команду Debugging или нажмите комбинацию кла- виш Остановив пошаговое выполнение программы вы можете вернуться к редактиро- ванию 230 Часть Основы создания кодов Точка останова B a s l c . N E T - guild • - У - '— - • fc , — " Ar • - ' 21.2. Окно Watch отображает текущие значения выбранных просмотра переменных Тест на проверку полученных вами знаний Что по-вашему является ошибкой? а. Решение заняться программированием. б. Visual обозначаются английскими словами. С русскими словами все было бы намно- го проще. в. Разные глупые действия, совершаемые неопытными пользователями. г. Все, что заставляет программу рабо- тать не так как нужно или вообще работать. 2. Как Visual Basic помогает "отлавливать" ошибки? а. Каждая ошибка выделяется определенным цветом и, когда вы на нее смотрите, начинает дрожать. б. Когда вы Visual Basic что на- мерены заняться ошибок, динамичная музыка, которая добавляет вам злости и решительности. в. Позволяет выполнить программу пошагово и проследить за принимаемыми переменными значениями. г. дает им размножаться. Глава 21. Борьба с ошибками 231 Часть V Создание разветвлений и Любая программа представляет собой набор инструкций для ком- объясняющих, что ему делать дальше. Простейшие про- граммы выглядят подобно переменю команд, подлежащих последо- вательному выполнению. Но слепое выполнение полученных инструкций — это далеко то, что способны делать серьезные программы. Большинство про- грамм получают информацию от пользователя и сами решают, что с ней делать дальше. Итак, данная часть книги посвящена вопросам создания программ, которые могут принимать решения самостоятельно. Кроме того, вы узнаете, как дать компьютеру инструкции, которые должны быть выполнены несколько раз подряд. Такие инструкции называются циклами. Они фактически говорят компьютеру: "Видишь этот на- бор команд? Их нужно выполнять снова и снова, пока я не разрешу тебе остановиться". Ваша программа должна самостоятельно принимать решения и многократно повторять нужные команды. Лишь "живые" и дина- мичные программы в состоянии заставить компьютер делать что-то по-настоящему полезное. Глава 22 Условные операторы > Использование логических значений Условные операторы If-Then и If Условные операторы и амые примитивные программы последовательно выполняют некий набор инструкций, а затем останавливаются. Разумеется, программы, которые каждый раз выполняют одни и те же действия, не могут представлять особого интереса, поэтому нужно научить их изменять свое поведение в зависимости от поступающих извне данных. Этими данными мо- гут быть щелчок мыши или нажатие клавиши, информация, введенная в текстовое поле фор- мы или из файла базы данных. После того как данные получены, программа должна решить, как на них реагировать. Большинство решений принимается в форме Если-То (If-Then), например: "Если пользова- тель щелкнул на кнопке Печать, то нужно вывести открытый документ на печать". Если про- грамму научить таким образом реагировать на поступление внешних данных и самостоятель- но принимать решения о своих последующих действиях, она начнет поддерживать диалог с пользователем и будет выглядеть даже более чем это есть на самом деле. Логические значения Чтобы иметь основание для принятия решения, нужно получить данные. Если данные по- лучены, нужно решить, что делать дальше. Принятое программой решение зависит от выпол- нения или невыполнения условия, чему соответствуют значения True (Истина) и F a l s e (Ложь). Именно эти два значения называются логическими. В Visual Basic логические значения могут быть представлены: отдельными переменными; выражениями. Присвоение логических значений переменным Логическое значение может быть присвоено только переменной, имеющей тип Boolean. Это означает, что она может принимать лишь одно из двух значений: True или F a l s e . Вот пример кода, посредством которого объявляются логические переменные: Dim F l a g , As B o o l e a n Теперь эти переменные могут принимать только одно из двух логических значений: F l a g = True CheckMe = F a l s e Проверить значение логической переменной можно двумя способами. Первый из — проверить, соответствует ли присвоенное значение значению True: Глава 22. Условные операторы If-Then 235 If Flag = True Then Второй способ (более быстрый) позволяет сделать то же самое без необходимости набора = True: If Flag Then Проверять, соответствует ли значение переменной значению True, необязательно поскольку Visual Basic в любом случае какое из двух значений присвоено переменной. Чтобы проверить, присвоено ли переменной можно набрать If Flag = F a l s e Then Или можно убрать = F a l s e , а перед названием набрать слово Not: If Not Flag Then Логические значения выражений Логические значения могут соответствовать не только отдельным переменным, но и группам переменных, собранных в отдельное выражение. В простейших выражениях сравни- вается значение одной переменой с некоторым заданным значением, например: Возраст > 21 Если переменная Возраст будет иметь значение, превышающие число 21, выражению будет соответствовать логическое значение True (Истина). Если же значение переменной будет равно или меньше числа 21, выражению будет соответствовать логическое значение (Ложь). Выражение которому соответствует одно из логических значений, может быть использо- вано в качестве условия оператора Возраст > 21 Then Вместо заданного постоянного значения в выражении можно значение дру- гой переменной — в таковом случае сравниваться уже будут значения двух переменных: If Возраст > Then Какое логическое значение будет соответствовать выражению Возраст > зависит от значений двух переменных: Возраст и Сравнивать можно не только числа, но и строки. В приведенном ниже примере имя, на- бранное в текстовом поле txtName (оно сохраняется как значение свойства Text), сравнива- ется со строкой Степан Разин. Если набранное имя совпадает с этой выражение принимает значение True, если не совпадает — If = "Степан Разин") Then В приведенном примере наличие круглых скобок вовсе не обязательно. Они просто помогают визуально выделить проверяемое выражение. Теперь, когда вы знаете, что из себя представляют логические значения и как они работа- ют, можно приступать к изучению работы условных операторов. 236 Часть V. Создание разветвлений и циклов Если вы забыли, как обработать сразу несколько логических вернитесь к разделу "Логические операторы" главы Условный В Visual Basic самым простым средством, с помощью которого программа может сделать какой-то выбор, является условный оператор Он проверяет, соответствует ли значению или выражению логическое значение True. Если соответствует, программа вы- полняет определенную инструкцию, а если нет — эта инструкция игнорируется. Вот как условный оператор выглядит в терминологии кодов BASIC: If Then Инструкция Продемонстрируем это на примере: If > 25 Then t x t N o t e . T e x t = " З а п о л н е н ! " Visual Basic интерпретирует данный код следующим образом. Эта команда говорит компьютеру: "Проверь значение переменной Количе- ство и, если оно больше числа 25, присвой свойству Text текстового поля значение Заполнен 2. Потом она, команда, добавляет: "Если значение переменной Количество меньше или равно числу 25, пропусти эту инструкцию и переходи к выполне- нию кодов следующей строки программы." Рассмотрим другой пример: If Красный Or Желтый Then Сообщение = "Стоп" Вот как это воспримет Visual Basic 1. Эта команда говорит: "Проверь значения переменных Красный и Желтый. Если хотя бы одно из них равно значению True, присвой переменной Сооб- щение значение 2. Затем она сообщает: "Если значения переменных Красный и Желтый совпа- дают со значением F a l s e , пропусти эту инструкцию и переходи к выполне- нию кодов следующей строки программы." Условный оператор проверяет истинность или ложность условия, а затем вы- полняет или не выполняет какую-то одну инструкцию. Но что делать, если в зависимости от условия должно быть выполнено или не выполнено сразу несколько инструкций? В таком случае нужно воспользоваться разновидностью оператора а именно оператором If. Этот оператор проверяет, соответствует ли выражению или переменной логическое зна- чение True, и если это так, программа выполняет заданный набор инструкций. Синтаксис оператора If выглядит следующим образом: If Условие Then End If |