При разработке приложений на Delphi часто возникают ситуации, когда необходимо преобразовать текст из компонента TEdit в числовой формат. Одна из таких ситуаций связана с обработкой исключений, возникающих при пустом тексте в TEdit. В данной статье мы рассмотрим, как правильно обработать такие исключения и избежать использования "пустых" блоков except.
Проблема с "пустыми" блоками except
В процессе работы с遗留代码, разработчики могут столкнуться с блоками except, которые не выполняют никаких действий. Пример такого кода:
Этот подход используется для предотвращения появления сообщений об ошибках при попытке преобразования пустого текста в числовой формат.
Альтернативные способы обработки исключений
В современных версиях Delphi рекомендуется использовать функцию TryStrToFloat, которая возвращает булево значение, указывающее на успешность преобразования, и результат преобразования передается в параметр по ссылке.
if TryStrToFloat(Edit1.Text, _value) then
// выполнение действий с _value
Если вы используете более старую версию Delphi, где TryStrToFloat недоступен, можно обернуть вызов StrToFloat в функцию, которая в случае возникновения исключения будет возвращать нулевое значение.
function SafeStrToFloat(const S: string): Double;
var
Value: Double;
begin
Result := 0.0;
try
Value := StrToFloat(S);
Result := Value;
except
// игнорирование исключения
end;
end;
Подходы к решению проблемы
Опция 1: Удаление блока except
Если пустой текст в TEdit не является допустимым значением, можно просто удалить блок except и позволить StrToFloat генерировать исключение в случае ошибки.
begin
...
_value := StrToFloat(Edit.Text);
...
end;
Опция 2: Явное указание специального случая
Если пустой текст в TEdit должен интерпретироваться как нулевое значение, можно явно проверить текст на пустоту и установить значение _value в 0.
begin
...
if (Trim(Edit.Text) = '') then
_value := 0
else
_value := StrToFloat(Edit.Text);
...
end;
Опция 3: Пользовательская функция с настройками
Можно создать пользовательскую функцию, которая будет принимать дополнительные параметры для обработки различных сценариев.
type
TDefaultMode = (dmNone, dmDefaultEmptyValue, dmDefaultInvalidValue);
function ReadFloatFromEditControl(AEdit: TCustomEdit; ADefaultMode: TDefaultMode = dmNone; ADefaultValue: Double = 0.0): Double;
begin
// реализация функции с учетом параметров ADefaultMode и ADefaultValue
end;
Заключение
При работе с исключениями важно понимать контекст их возникновения и принимать решения, основанные на логике работы приложения. Использование пустых блоков except не является хорошей практикой, и существуют альтернативные способы обработки исключений, которые делают код более читаемым и поддерживаемым.
В статье рассматривается проблема обработки исключений при преобразовании текста из компонента TEdit в число в среде разработки Delphi и предлагаются альтернативные способы решения этой задачи, включая использование функции TryStrToFloat и созд
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.