Стратегии Программирования
December 27th, 2006 Begemot Posted in Программирование
“Чего-то накатило… ” (с) один хороший фильм
Вот так сидел вчера, сидел, почитывал доку и тут чего-то вдруг накатило… сам не знаю, вроде не было раньше у меня такой тяги особо. Я даже пиво с игрушкой отложил на часа на полтора:)
Disclaimer: Я не профессиональный переводчик, и даже не переводчик вообще. Английский я знаю весьма посредственно, русский – примерно на том же уровне. Так что не обессудьте и не надо кидать в меня помидорами, кидайте лучше денежными знаками или на худой конец линками 🙂
Это перевод куска документации к wxWidgwtes. Если вам очень не понравился мой перевод – читайте оригинал.
Стратегии Программирования
Стратегия уменьшения ошибок программирования
Используйте ASSERT
Даже не смотря то, что сам я не использую этот подход внутри wxWidgets, это достаточно здравая мысль использовать макросы ASSERT, проверяющие логическое условия и печатающие сообщение об ошибке в случае чего. Компилятор может исключить эти макросы из финальной сборки библиотеки и вашего приложения. Использование ASSERT это пример ‘защитного программирования’, это предупредит вас заранее о проблемах, которые могут возникнуть в будущем.
Предпочитайте использовать wxString вместо массива символов
Использование wxString может быть значительно более безопасным и удобным чем использование char *. Опять же, я предлагаю то что не практиковал ранее сам, но теперь я пытаюсь использовать wxString везде где это возможно. Вы можете в значительной степени уменьшить вероятность утечек памяти, к тому же использование перегруженных операторов значительно более удобно чем использование таких функций как strcmp. Использование wxString не значительно увеличит размер вашей программы, но размер этого дополнительного кода компенсируется более легким манипулированием строками (а это значит меньше вашего кода).
Тоже самое относится и к другим типам данным: используйте классы везде где только можно.
Стратегия для портабельности
Используйте относительное позиционирование или сопряжение элементов
Не используйте абсолютное позиционирование, если вы можете обойтись без него. Различные системы ГУИ имеют разные размеры элементов. Подумайте об использование системы сопряжений, даже не смотря на то, что это может быть сложнее в реализации
В качестве альтернативного варианта, вы могли бы использовать отдельные .wrc (ресурсные файлы wxWidgets) для платформ с разными размерами контролов. Также вы можете разделить ваши элементы пустым пространством, для того что бы избегнуть проблем.
Используйте ресурсные файлы wxWidgets
Используйте .xrc (ресурсные файлы wxWidgets) везде где вы можете, так как их очень легко менять независимо от исходного кода.
Стратегия для отладки
Позитивное мышление
Часто мы сильно раздуваем проблему в своем воображении, вплоть до того, что кажется что она угрожает неделями, месяцами или даже годами работы. Проблема с которой вы столкнулись может казаться непреодолимой, но почти никогда таковой не является. По мере приобретения опыта в программировании, вы сможете вспомнить не один подобный эпизод который бросал вас в глубины отчаяния. Но помните, вы всегда как-нибудь решали проблему!
Настойчивость – вот ключ к решению проблем, даже не смотря на то что кажущаяся тривиальной проблема требует иногда слишком много времени для решения. В конце концов, вы наверное даже удивитесь почему это вы так сильно волновались. Конечно нельзя сказать, что это совсем безболезненно, но все же постарайтесь не волноваться – в этой жизни есть намного более важные вещи.
Упростите проблему
Уменьшите код который воспроизводит ошибку, до самой маленькой программы. Если вы не можете уменьшить большую и сложную программу, тогда попытайтесь гарантировать что ваш код не прячет проблему (вы можете попытаться уменьшить последствия проблемы любым путем, но ведь сейчас вы хотите решить ее, не так ли?) (?? If it is not possible to reduce a large and complex program to a very small program, then try to ensure your code doesn’t hide the problem (you may have attempted to minimize the problem in some way: but now you want to expose it))
При удаче, вы можете добавить небольшой кусок кода который превращает работающую программу в неработающую (?? With luck, you can add a small amount of code that causes the program to go from functioning to non-functioning state). Это может дать вам ключ к решению проблемы. В некоторых случаях, например, при утечках памяти или неправильном ее освобождении, это может продолжать выдавать случайные результаты.
Используйте отладчик
Это звучит смешно, но вы будете удивлены когда узнаете как много людей не используют отладчик. Часто им сложно установить или изучить как он работает, но это действительно важно для написания кода более серьёзного чем тривиальные программы.
Используйте функции для ведения лога
wxWidgets предоставляет набор функций для ведения лога, которые вы можете использовать в своей программе: смотри Функции для ведения лога.
Использования операторов для трассировки может быть более удобным чем использование отладчика, в ряде случаев. Например когда ваш отладчик не поддерживает большую часть отлаживаемого кода или вы хотите распечатать большое количество переменных.
Используйте отладочные средства wxWidgets
Вы можете использовать wxDebugContext для проверки повреждения памяти или ее утечек. Фактически, если вы правильно настроили wxWidgets, библиотека автоматически при завершении программы в режиме отладки проверит наличие утечек. В зависимости от используемой вами платформы и компилятора, большая или меньшая часть специфической информации о проблеме будет отображена в логе.
Вы должны также использовать отладочные макросы как часть стратегии ‘защитного программирования’, свободно используйте wxASSERTs для обнаружения проблем в вашем коде, как можно раньше. Передовое мышление сохранит вам огромное количество времени в долгосрочной перспективе.
Смотрите обзор средств отладки для более полной информации.
December 27th, 2006 at 12:14
Ну что тут скажешь? 🙂 Лучше поздно чем никогда.
А навскидку скажешь чем отличается ASSERT(x) и assert(x)? 😉
Какие проблемы могут с ними быть и в каких случаях?
Сегодня просто грандиозный день! 🙂
Я узнал, что все виды чая делаются из одного растения! Последнее открытие такого масштаба было разве что года три-четыре назад, когда я открыл для себя DriverStudio 😀
December 28th, 2006 at 5:51
Я не волшебник, я только учусь:)
Ну что тут скажешь? Лучше поздно чем никогда..:)
Хотя смотря что относить к чаю, относится ли к чаю мате? или прекрасный травяной чай который замечательно делает моя супруга?:)