![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| shmelina |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 5.6.2009 Репутация: нет Всего: нет |
Часто бывает нужно, для самоконтроля, чтобы если забыл инициализировать переменную, то при попытке использования этой переменной, программа тебе ошибку выдаст.
Например, есть переменная типа Integer. По своему алгоритму я ее должен инициализировать (установить какое-то значение). Но могу ведь и забыть. А там ведь число уже какое-то есть. Было бы здорово, если бы там Null был. Ну или что-то подобное. Было так же хорошо, чтобы я мог сбросить установленное ранее значение, чтобы переменная снова стала неинициализированной (как бы Null установить). Сейчас я использую для этих целей типом Variant. Но он больно тяжеловат. Да и туда кроме Integer можно и сроку и указатель запихнуть. А хотелось бы только (в данном случае) Integer или Null. Другой пример: Моя программа активно общается с базой данных. Мне нужно считать значение внешнего ключа и запихнуть в переменную. Но внешний ключ не Not Null и там спокойно может быть Null. Только тип Variant? Может какой тип данных для этого есть, а я его не знаю? |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Делфи это объектно ориентированный язык. Все самое вкусное через объекты. Любой объект при создании зануляет все свое содержимое в том числе и записи и строки и массивы указатели, не говоря уже про простые числа. Создал объект можешь забыть про зануление его полей. Другое дело нуль не всегда правильная инициализация. В этом случае нужно в конструкторе объекта присваивать начальные значения (если они должны быть отличными от нуля). -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 16 Всего: 54 |
NULL может быть только у variant -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 29 Всего: 89 |
Ну, напрямую такое не поддерживается, но можно делать хаками.
Например. Или так. Добавлено через 58 секунд А вот ещё. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Dom |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 7.8.2005 Репутация: 3 Всего: 4 |
Напомню, что у числовых значений может быть значение NAN (not a number).
Возможно это будет полезным в вашем случае. Только с ним аккуратно работать надо, а то могут быть грабли. |
|||
|
||||
| RomanEEP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: 1 Всего: 8 |
NAN - только у чисел с плавающей точкой, у Integer его нет
|
|||
|
||||
| shmelina |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 5.6.2009 Репутация: нет Всего: нет |
Это я все понимаю. Но 0 в типе Integer, это уже наличие значения. А мне нужно как в объектах - или есть значение или нет его (nil). Если значения нет и пытаешься сделать Form.Close, то выдается ошибка. Я так же и простым типом Integer хочу. :(
Идею понял. Но не понял как обнулять (сбрасывать) значение. Еще вопрос, что более быстро работает эта идея с дженериками (Nullable<Integer>) или тупо Variant? Плохо, что это не родной для Delphi тип и имеются некоторые ограничения при использовании по сравнению с Integer. Спасибо. Не знал. Но он ошибок не выдает при использовании. А в результате вычисления с неинициализированной переменной видим NAN. Где ошибка была - не понятно. Угу. Жаль нет NullableInteger. Использовать Variant и не парится? Это сообщение отредактировал(а) shmelina - 28.1.2010, 20:28 |
|||
|
||||
| Frees |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 16 Всего: 54 |
будешь парится в другом месте например: это исключение
а это нет
Это сообщение отредактировал(а) Frees - 28.1.2010, 20:58 -------------------- Кольцов Виктор Владимирович |
||||
|
|||||
| shmelina |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 5.6.2009 Репутация: нет Всего: нет |
||||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 16 Всего: 54 |
если хочеш интеджер поменять на вариант то это шило на мыло(одни грабли на другие) -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 29 Всего: 89 |
Смотря какой способ. В общем случае это надо сделать доп. метод. Пример с adv. records:
По аналогии и с генериками. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| sCreator |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 20.8.2009 Где: Московская област ь Репутация: нет Всего: 5 |
А использование ссылки на integer не подойдет ?
не инициализированная ссылка имее значение nil ( только надо остарожно с локальными переменными ) и i^ если i = nil должно дать исключение Но придется возиться с динамическим выделением памяти - зато остальное быстро. |
|||
|
||||
| shmelina |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 5.6.2009 Репутация: нет Всего: нет |
В общем буду вариантом пользоваться. Все остальное сложно.
Всем спасибо за помощь в этом вопросе. Узнал кое-что новое. |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 16 Всего: 54 |
про VarisNULL и VarIsEmpty не забывай ))) -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| shmelina |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 5.6.2009 Репутация: нет Всего: нет |
||||
|
||||
![]()
|
| Правила форума "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. |