1 / 19

Код. Данные и операторы. 24 апреля 2008 г.

Технологии программирования. Код. Данные и операторы. 24 апреля 2008 г. 4 курс. Числа. Избегаем магических чисел; Надежность и простота изменений Программа лучше читается for i = 0 to 99 do ... for i = 0 to MAX_ENTRIES-1 do ... Из чисел в программе можно использовать только 0 и 1;

claral
Download Presentation

Код. Данные и операторы. 24 апреля 2008 г.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Технологии программирования Код. Данные и операторы.24 апреля 2008 г. 4 курс

  2. Числа • Избегаем магических чисел; • Надежность и простота изменений • Программа лучше читается for i = 0 to 99 do ... for i = 0 to MAX_ENTRIES-1 do ... • Из чисел в программе можно использовать только 0 и 1; • Всегда проверяем деление на 0; • Избегаем сравнения чисел разных типов.

  3. Целые числа • Осторожнее с делением! Чему равно 7/10 ? А 10 * (7/10) ? • Проверяйте переполнение. 250 * 300 = 75000 или 9464?

  4. Числа с плавающей точкой • Потери при сложении и вычитании: 5 000 000,02 - 5 000 000,01 = 0 ? • Неожиданные эффекты при сравнении на равенство: //Переменная nominal — 64-битное вещественное число. double nominal = 1.0; double sum = 0.0; // sum вычисляется как 10*0,1. Она должна быть равна 1,0. for ( int i = 0; i < 10; i++ ) { sum += 0.1; } If ( nominal == sum ) // Значение в скобках истино или ложно?

  5. Строки и символы • Избегаем магических строк!!! // Плохо! if ( input_char == OxlB ) . . . // Лучше! If ( input_char == ESCAPE ) . . . • Осторожно, unicode! • Планируйте локализацию как можно раньше! Отдельная программа для каждого языка, или переключение во время работы?

  6. Логические переменные Используйте логические переменные для документрования программы. Добавьте переменную, название которой сделает смысл проверки очевидным. // Запутанная проверка if ( ( elementlndex < 0 ) || ( MAX_ELEMENTS < elementlndex ) || ( elementlndex == lastElementlndex ) ) // Более понятное условие violation = ( ( elementlndex < 0 ) || ( MAX_EI_EMENTS < elementlndex ) ); lastEntry = ( elementlndex == lastElementlndex ); if ( violation | | lastEntry )

  7. Перечислимые типы Обычно используются, когда вы знаете все возможные значения переменной и хотите выразить их словами. Используются для повышения читабельности кода. Сравним: int result = RetrievePayrollData( data, true, false, false, true ); // или так: int result = RetrievePayrollData( data, EmploymentStatus_CuгrentEmployee, PayrollType_Salaried, SavingsPlan_NoDeduction, MedicalCoverage_IncludeDependents );

  8. Именованные константы • Используйте именованные константы в объявлениях данных. • Избегайте «очевидных» констант: For i = 1 To 12 profit( i ) = revenue( i ) - expense( i ) Next ‘ Лучше так: For i = 1 To NUM_MONTHS_IN_YEAR profit( i ) = revenue( i ) - expense( i ) Next ‘ Ещё лучше: For month = 1 To NUM_MONTHS_IN_YEAR profit( month ) = revenue( month ) - expense( month ) Next

  9. Массивы Главные проблемы с масссивами – • выход за границы и • путаница в индексах (в случае многомерных массивов). По возможности, используйте в программе контейнеры с последовательным или ассоциативным доступом. (стеки, очереди, множества, хэши)

  10. Свои типы • Упрощают модификацию кода (изменение в единственном месте); • Использование имен из предметной области – указание на смысл переменной; • В некоторых языках (Pascal, Ada) можно добавить ограничение на значения; • Хм, а может быть сразу создать свой класс?

  11. Структуры Структуры объединяют взаимосвязанные элементы данных. Это позволяет: • Структурировать код; • Упростить операции с блоками данных; • Уменьшить список параметров в процедурах; ‘ Громоздкий вызов процедуры HardWayRoutine( name, address, phone, ssn, gender, salary ) ‘ Элегантный вызов процедуры EasyWayRoutine( employee )

  12. Указатели Указатель – это адрес в памяти и знание о том, как интерпретировать содержимое этой области. Ошибки с указателями трудно найти, поэтому: • Изолируйте операции с указателями в методах и классах; • Удаляйте указатели на том же уровне, где они созданы; • Проверяйте указатели перед использованием; • Не жалейте переменных для указателей; • Создайте свои безопасные методы инициализации и удаления указателей.

  13. Глобальные данные Глобальные переменные – это плохой стиль программирования. Использование глобальных данных – последняя мера, когда все остальные возможности исчерпаны. Используйте методы доступа вместо глобальных данных. Скройте данные в классе. Управляйте доступом к глобальным данным при помощи блокировок. Соблюдайте уровень абстракции при именовании методов доступа.

  14. Последовательный код Когда важно обеспечить последовательное выполнение нескольких операторов – подчеркните это в названиях методов и общности данных. Если ничего не помогает – в конце концов, напишите комментарий! Группируйте взаимосвязанные операторы. Выносите слабосвязанные группы в отдельные методы.

  15. Условные операторы • Сначала – нормальный вариант развития событий, потом (после else) – исключительные случаи. • Вообще, более вероятные случаи должны быть размещены выше в коде. • Проверьте – может быть вам все же нужен else? • Когда использовать if-then-else, а когда – case? • НЕ используйте для case искусственную переменную.

  16. Циклы • Выберите правильный тип цикла. • Назовите переменную цикла осмысленно. • Пишите короткие циклы (не больше страницы). • Ограничьте вложенность тремя уровнями. • При всех ли обстоятельствах завершается цикл?

  17. Табличные методы Табличный метод – альтернатива множественным if и case. Эта схема подразумевает использование таблицы подстановки. В таблице хранятся либо сами данные, либо ссылки на методы их обработки. Основной вопрос – выбор способа доступа.

  18. Нестандартные структуры управления • Рекурсия: • Убедитесь, что рекурсия остановится; • Не используйте циклическую рекурсию; • Следите за стеком. • Goto or not goto? Вопрос религии. Лучше использовать try … finally • «Дострочные» и множественные возвраты из процедур: только при необходимости (чтобы избежать чрезмерной вложенности).

  19. Спасибо за внимание Конец лекции.

More Related