![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
vstepanov78 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 10.1.2006 Где: Москва Репутация: нет Всего: нет |
В теме предполагаю писать и предлагаю обмениваться различными красивыми решениями по универсализации кода, подходов к простым типичным, часто возникающим в процессе программирования задачам (баланс - если сделать слишком универсально, то выйдет слишком сложно, а весь функционал и не потребуется, а если неуниверсально, то вскоре придется переделывать или доделывать). Также идеи раличных удобных функций и объектов. Примерные темы: работа с различными типами (различные утилитарные функции по каждому типу, которых не хватает в стандартных библиотеках Delphi), парсинг строк, память, списки (включая таблицы, иерархия), файлы (включая работу с именами файлов, логи, параметры командной строки), потоки, ini и реестр, многопоточность, исключительные ситуации, языки, а также окна и диалоги, базы данных, интернет, процессы, финансовые функции, криптография, VCL и др.
Пример простых, но удобных функций, которыми часто пользуюсь, скажем, при конструировании сообщений пользователю:
Еще примеры удобных утилитарных функций: GetMin, GetMax, MinMax; AddPathSlash, DelPathSlash; BufToStr, StrToBuf; FileToStr, StrToFile; StreamToStr, StrToStream... Или, скажем, вначале думал о более-менее универсальном объекте логирования, которым бы везде пользовался, объект сделал (с кэшированием дескриптора файла), но для отладочного логирования, интегрированного во многих местах кода (да и почти везде) пользуюсь простой функцией W с вариантным открытым массивом аргументов (ностальгия по WriteLn), которая в зависимости от глобальной настройки пишет в файл и/или на консоль и/или выводит сообщения на экран (с выбором - продолжить, продолжить, отключив вывод сообщений на экран насовсем/на 25 сообщений, выйти из программы) и/или может взаимодействовать с другим приложением с более сложной логикой фильтрации/отображения логируемой инфы. В файловые логи пишем дату и время, миллисекунды с прошлого вызова W, а далее через Tab параметры W, кодируя их как строки С++ для однозначного обратного разбора (при других глоб.настройках можно не кодируя и слитно), имя файлового лога - по умолчанию во временном каталоге имя библиотеки, год и месяц точка log, можно настроить и по дням или по годам, по классам, см далее. Первый параметр открытого массива функции W определяет класс записи, например, 'WAPI' - вызовы Windows API, 'SQL' - SQL-запрос, 'ERR' - генерация исключения и т.п. Для исключений, правда, приходится описывать функции их генерации, например, общая:
(здесь функция IsDebug('ERR') возвращает True, если включен режим записи в лог класс записи 'ERR'; может быть задано писать в лог несколько классов записи, перечисляются через пробелы, или задан режим '*' - писать всё; директивы компилятора позволяют исключить из кода программы отладочное логирование все целиком или данного класса ERR; при первом обращении к IsDebug функция читает типы записи в лог из специального параметра командной строки; вот в целом такой подход к логированию, которого хватает более-менее везде, получился; возможно, еще нужно будет добавить в глобальные настройки количество последних файлов лога, которые хранить, удаляя более старые) |
||||
|
|||||
vstepanov78 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 10.1.2006 Где: Москва Репутация: нет Всего: нет |
Пример еще универсализации.
Вот, допустим, нужно работать с версиями. Разбирать, собирать, сравнивать. Получаются примерно такие функции:
Т.е. идея и в организации некой совместной работы над подобными функциями - достаточно простыми (нетяжеловесными), но и более-менее универсальными - применимыми почти во всех случаях, когда "рядовому программисту") нужно работать с подобной темой. Что-то вроде wiki-исходников. Список тем нужно будет расписать... утилитарные функции по работе: с различными базовыми типами, потоками, файлами, ini, реестром, многопоточнотью, исключенями, языками, диалогами, БД, интернетом, скриптами, процессами, сжатием, оборудованием, графикой, финансовые, криптографические. |
|||
|
||||
cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 7 Всего: 15 |
Большинство вещей уже реализованно в VCL. Надо просто разбираться с исходным кодом, тогда отпадёт необходимость написания типа
Например аналог вышеописанной функции уже сидит в модуле Math (емнип), помойму наз. IfThen По поводу, логов, не надо выдумывать ВЕЛОСИПЕД, потому как на практике, получится не лучше существующих. Например есть готовый лог, портированный Keith Wood из Джавки. Очень мощный, потокобезопасный лог! Надо с ним только разобраться и будет вам счастье ![]() Это сообщение отредактировал(а) cat512 - 19.11.2010, 18:38 |
|||
|
||||
imageman |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 30.9.2004 Репутация: 1 Всего: 1 |
тогда давайте писать какие функции из каких библиотек используете почти во всех программах
к примеру есть стандартная отладочная функция assert( f(x)=1,'Ой, f(x)<>1'); удобна тем, что можно быстро отключить проверки в релизе и тем, что выдает номер строки |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |