powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / Функция инициализации или исключение в конструкторе?
25 сообщений из 60, страница 1 из 3
Функция инициализации или исключение в конструкторе?
    #40049744
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Философский вопрос. Пример надуманный, но демонстрирует проблему.

Допустим у нас есть класс настроек, который читает данные из .ini файла.
У нас есть два варианта для инициализации и обработки ошибок:

1) Функция инициализации возвращающая признак ошибки.
2) Или исключение вылетающие из конструктора.

В варианте № 1 в деструкторе нужно следить, а были ли мы успешно прочтены и
только тогда сохранять изменения. В варианте № 2 это делать не нужно.

В варианте № 2 такой объект нельзя сделать глобальным.

Вот что предпочтительнее в общем случае?
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40049745
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настроек по умолчанию совсем нет?
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40049748
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Настроек по умолчанию совсем нет?

Это неизвестно. Допустим по умолчанию настроек нет. Но если мы выбрали
путь с исключением, а потом появились настройки по умолчанию… То мы
уже не можем наружу сообщить об ошибке. Всегда успешно!

Это ещё один аспект проблемы. :)
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40049751
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
Нужно делать конструктор всегда гарантированно без исключений. Простое правило.
Отсюда вытекает доп функция инициализации
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40049758
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Настроек по умолчанию совсем нет?
+1
Как раз показывает что теоретический вопрос разбивается о практику.
Если удалили ini файл, это не значит что мы должны застопорить ИС.
И сообщить всегда можно все что угодно.
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40049762
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Basil A. Sidorov
Настроек по умолчанию совсем нет?
+1
Как раз показывает что теоретический вопрос разбивается о практику.
Если удалили ini файл, это не значит что мы должны застопорить ИС.
И сообщить всегда можно все что угодно.

Логика может быть такая, что если настройки не корректны или отсутствуют, то
мы и не работаем. Потому что работа со значениями по умолчанию бессмысленна
или даже вредна.
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40049767
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спорная логика, но даже в этом случае должна формироваться пустая конфигурация и приложение будет падать по разыменовыванию null-евого указателя
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40049781
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Спорная логика, но даже в этом случае должна формироваться пустая конфигурация и приложение будет падать по разыменовыванию null-евого указателя

Нормальная логика. В таком варианте приложение после MsgBox об ошибке или должно завершить свою работу. Ну или в GUI заблокировать функционал, который опирается на эти настройки.

В данном случае лучше даже упасть, чем начать работу с настройками по умолчанию, если по логике работы настроек по умолчанию быть не может.
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40049788
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
PetroNotC Sharp
пропущено...
+1
Как раз показывает что теоретический вопрос разбивается о практику.
Если удалили ini файл, это не значит что мы должны застопорить ИС.
И сообщить всегда можно все что угодно.

Логика может быть такая, что если настройки не корректны или отсутствуют, то
мы и не работаем. Потому что работа со значениями по умолчанию бессмысленна
или даже вредна.

Я бы сказал, что так можно, но не очень профессионально. Надо деньги посчитать. И потерю имиджа)
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40049790
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Basil A. Sidorov
Спорная логика, но даже в этом случае должна формироваться пустая конфигурация и приложение будет падать по разыменовыванию null-евого указателя

Нормальная логика. В таком варианте приложение после MsgBox об ошибке или должно завершить свою работу. Ну или в GUI заблокировать функционал, который опирается на эти настройки.

В данном случае лучше даже упасть, чем начать работу с настройками по умолчанию, если по логике работы настроек по умолчанию быть не может.
в крайнем случае я Message Box выдаю Переустановите систему.
Так как диалоги должны давать ответ Что юзверю делать.
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40049792
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Также интересна система не имеющая default settings
Калькулятор?
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40049813
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpТакже интересна система не имеющая default settings

Любое коммерческое приложение у которого лицензионный ключ - часть настроек.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40049816
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дефолтный конфиг все таки можно создать. Его задача будет - стать реплейсментом для тех
полей которые были некорректны в кастомном конфиге. И конструктор все-таки должен
отработать без исключений и без ошибок. Это будет в духе следования принципам convention over
configuration. И после того как конструктор отработал успешно. Можно смотреть статусы
всех пропертей и смотреть какие из них были взяты из кастомного конфига и какие заменены на
дефолт. С ключами тоже что-то можно придумать. Сделать ключ-заглушку.

Падающий конструктор - всегда плохо. У нас не остается следа для анализа. Нет объекта - нет дампа.

Как говорят менты - нету трупа - нету уголовного дела.
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40049881
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
Я думаю, просто нет таких без настроек по умолчанию.
У меня положение окна главного это настройки.
Если настроек нет (первый старт) то я запускаю default Left, TOP, w, h окна.
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40049892
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в глубинах корпоративной сети стоит сервер на котором крутится Самая Главная База.
Какие настройки ты пропишешь по умолчанию для подключения к ней?

А размеры и положение окна это не настройки, это сохранённое состояние, как у игры какой-нибудь.
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40049894
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,


Забудь про игры. Состояние вполне может быть настройкой.
Вот принял сегодня на грудь. Вполне настроился на работу)))))
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40049899
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Философский вопрос. Пример надуманный, но демонстрирует проблему.

Допустим у нас есть класс настроек, который читает данные из .ini файла.
У нас есть два варианта для инициализации и обработки ошибок:

1) Функция инициализации возвращающая признак ошибки.
2) Или исключение вылетающие из конструктора.

В варианте № 1 в деструкторе нужно следить, а были ли мы успешно прочтены и
только тогда сохранять изменения. В варианте № 2 это делать не нужно.

В варианте № 2 такой объект нельзя сделать глобальным.

Вот что предпочтительнее в общем случае?


А почему если исключение, то обязательно вылетающее из конструктора?

Почему нет варианта "функция инициализации, выбрасывающая исключение" ?

Что сложного в проверке "а были ли мы успешно прочтены и только тогда сохранять изменения." ?


В общем случае не понятно что предпочтительнее. Потому что нет требований к этому куску ПО.

Можно и так, и эдак , и разэдак, все три варианта допустимы.
Исключение из конструктора -- ничего в этом нет.
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40049901
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
petrav,
Нужно делать конструктор всегда гарантированно без исключений. Простое правило.
Отсюда вытекает доп функция инициализации


Ну , есть такой подход, но там по-другому -- конструктор не должен ничего сложного делать (типа чтения файла).

А исключение из него бросить -- нет проблем.
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40049910
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Где-то в глубинах корпоративной сети стоит сервер на котором крутится Самая Главная База.
Какие настройки ты пропишешь по умолчанию для подключения к ней?

Пишешь
Код: plaintext
1.
2.
3.
4.
host : localhost
port : 1551
user : scott
pwd : tiger


Конструктор конфигов отрабатывает успешно. Не падает. Цель - достигнута.

Опция успеха подключения к БД - это уже вторая задача и ее надо изучать отдельно от первой.
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40049968
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
PetroNotC Sharp
petrav,
Нужно делать конструктор всегда гарантированно без исключений. Простое правило.
Отсюда вытекает доп функция инициализации


Ну , есть такой подход, но там по-другому -- конструктор не должен ничего сложного делать (типа чтения файла).

Почему же не должен?
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40049978
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
petrav
Философский вопрос. Пример надуманный, но демонстрирует проблему.

Допустим у нас есть класс настроек, который читает данные из .ini файла.
У нас есть два варианта для инициализации и обработки ошибок:

1) Функция инициализации возвращающая признак ошибки.
2) Или исключение вылетающие из конструктора.

В варианте № 1 в деструкторе нужно следить, а были ли мы успешно прочтены и
только тогда сохранять изменения. В варианте № 2 это делать не нужно.

В варианте № 2 такой объект нельзя сделать глобальным.

Вот что предпочтительнее в общем случае?


А почему если исключение, то обязательно вылетающее из конструктора?

Почему нет варианта "функция инициализации, выбрасывающая исключение" ?

Потому что мои два варианта отличаются фундаментально: в случае возникновения ошибки
объект настроек или сконструирован, или же нет. Ваш третий вариант ничего филосовски
нового не привносит.

Кстати, вариант с функцией инициализации тем фундаментально-то и плох: сконструирован
объект в некорректном состоянии. И он в таком состоянии доступен остальным объектам.

MasterZiv
Что сложного в проверке "а были ли мы успешно прочтены и только тогда сохранять изменения." ?

Не сложно. Но мы тут просто рассуждаем. То да сё.
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40049986
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
MasterZiv
пропущено...


Ну , есть такой подход, но там по-другому -- конструктор не должен ничего сложного делать (типа чтения файла).

Почему же не должен?
нельзя I/O
Не масштабируемо. Не потокоустойчиво. Не дуракоустойчиво
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40049991
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
>объект настроек или сконструирован, или же нет
Ты собрался стоить главное окно приложения.
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40050012
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
petrav
пропущено...

Почему же не должен?
нельзя I/O
Не масштабируемо. Не потокоустойчиво. Не дуракоустойчиво

А почему не потокоустойчиво?
...
Рейтинг: 0 / 0
Функция инициализации или исключение в конструкторе?
    #40050016
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Ну какие Райзе в потоках
...
Рейтинг: 0 / 0
25 сообщений из 60, страница 1 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Функция инициализации или исключение в конструкторе?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]