|
|
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Философский вопрос. Пример надуманный, но демонстрирует проблему. Допустим у нас есть класс настроек, который читает данные из .ini файла. У нас есть два варианта для инициализации и обработки ошибок: 1) Функция инициализации возвращающая признак ошибки. 2) Или исключение вылетающие из конструктора. В варианте № 1 в деструкторе нужно следить, а были ли мы успешно прочтены и только тогда сохранять изменения. В варианте № 2 это делать не нужно. В варианте № 2 такой объект нельзя сделать глобальным. Вот что предпочтительнее в общем случае? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 09:57:28 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Настроек по умолчанию совсем нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 10:00:38 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov Настроек по умолчанию совсем нет? Это неизвестно. Допустим по умолчанию настроек нет. Но если мы выбрали путь с исключением, а потом появились настройки по умолчанию… То мы уже не можем наружу сообщить об ошибке. Всегда успешно! Это ещё один аспект проблемы. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 10:06:20 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
petrav, Нужно делать конструктор всегда гарантированно без исключений. Простое правило. Отсюда вытекает доп функция инициализации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 10:10:40 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov Настроек по умолчанию совсем нет? Как раз показывает что теоретический вопрос разбивается о практику. Если удалили ini файл, это не значит что мы должны застопорить ИС. И сообщить всегда можно все что угодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 10:40:50 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
PetroNotC Sharp Basil A. Sidorov Настроек по умолчанию совсем нет? Как раз показывает что теоретический вопрос разбивается о практику. Если удалили ini файл, это не значит что мы должны застопорить ИС. И сообщить всегда можно все что угодно. Логика может быть такая, что если настройки не корректны или отсутствуют, то мы и не работаем. Потому что работа со значениями по умолчанию бессмысленна или даже вредна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 10:56:18 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Спорная логика, но даже в этом случае должна формироваться пустая конфигурация и приложение будет падать по разыменовыванию null-евого указателя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 11:09:29 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov Спорная логика, но даже в этом случае должна формироваться пустая конфигурация и приложение будет падать по разыменовыванию null-евого указателя Нормальная логика. В таком варианте приложение после MsgBox об ошибке или должно завершить свою работу. Ну или в GUI заблокировать функционал, который опирается на эти настройки. В данном случае лучше даже упасть, чем начать работу с настройками по умолчанию, если по логике работы настроек по умолчанию быть не может. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 11:58:29 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
petrav PetroNotC Sharp пропущено... +1 Как раз показывает что теоретический вопрос разбивается о практику. Если удалили ini файл, это не значит что мы должны застопорить ИС. И сообщить всегда можно все что угодно. Логика может быть такая, что если настройки не корректны или отсутствуют, то мы и не работаем. Потому что работа со значениями по умолчанию бессмысленна или даже вредна. Я бы сказал, что так можно, но не очень профессионально. Надо деньги посчитать. И потерю имиджа) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 12:10:51 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
petrav Basil A. Sidorov Спорная логика, но даже в этом случае должна формироваться пустая конфигурация и приложение будет падать по разыменовыванию null-евого указателя Нормальная логика. В таком варианте приложение после MsgBox об ошибке или должно завершить свою работу. Ну или в GUI заблокировать функционал, который опирается на эти настройки. В данном случае лучше даже упасть, чем начать работу с настройками по умолчанию, если по логике работы настроек по умолчанию быть не может. Так как диалоги должны давать ответ Что юзверю делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 12:13:06 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Также интересна система не имеющая default settings Калькулятор? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 12:17:41 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
PetroNotC SharpТакже интересна система не имеющая default settings Любое коммерческое приложение у которого лицензионный ключ - часть настроек. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 13:42:31 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Дефолтный конфиг все таки можно создать. Его задача будет - стать реплейсментом для тех полей которые были некорректны в кастомном конфиге. И конструктор все-таки должен отработать без исключений и без ошибок. Это будет в духе следования принципам convention over configuration. И после того как конструктор отработал успешно. Можно смотреть статусы всех пропертей и смотреть какие из них были взяты из кастомного конфига и какие заменены на дефолт. С ключами тоже что-то можно придумать. Сделать ключ-заглушку. Падающий конструктор - всегда плохо. У нас не остается следа для анализа. Нет объекта - нет дампа. Как говорят менты - нету трупа - нету уголовного дела. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 13:49:19 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Я думаю, просто нет таких без настроек по умолчанию. У меня положение окна главного это настройки. Если настроек нет (первый старт) то я запускаю default Left, TOP, w, h окна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 15:38:46 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Где-то в глубинах корпоративной сети стоит сервер на котором крутится Самая Главная База. Какие настройки ты пропишешь по умолчанию для подключения к ней? А размеры и положение окна это не настройки, это сохранённое состояние, как у игры какой-нибудь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 15:55:46 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Забудь про игры. Состояние вполне может быть настройкой. Вот принял сегодня на грудь. Вполне настроился на работу))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 15:59:32 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
petrav Философский вопрос. Пример надуманный, но демонстрирует проблему. Допустим у нас есть класс настроек, который читает данные из .ini файла. У нас есть два варианта для инициализации и обработки ошибок: 1) Функция инициализации возвращающая признак ошибки. 2) Или исключение вылетающие из конструктора. В варианте № 1 в деструкторе нужно следить, а были ли мы успешно прочтены и только тогда сохранять изменения. В варианте № 2 это делать не нужно. В варианте № 2 такой объект нельзя сделать глобальным. Вот что предпочтительнее в общем случае? А почему если исключение, то обязательно вылетающее из конструктора? Почему нет варианта "функция инициализации, выбрасывающая исключение" ? Что сложного в проверке "а были ли мы успешно прочтены и только тогда сохранять изменения." ? В общем случае не понятно что предпочтительнее. Потому что нет требований к этому куску ПО. Можно и так, и эдак , и разэдак, все три варианта допустимы. Исключение из конструктора -- ничего в этом нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 16:04:24 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
PetroNotC Sharp petrav, Нужно делать конструктор всегда гарантированно без исключений. Простое правило. Отсюда вытекает доп функция инициализации Ну , есть такой подход, но там по-другому -- конструктор не должен ничего сложного делать (типа чтения файла). А исключение из него бросить -- нет проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 16:05:51 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Где-то в глубинах корпоративной сети стоит сервер на котором крутится Самая Главная База. Какие настройки ты пропишешь по умолчанию для подключения к ней? Пишешь Код: plaintext 1. 2. 3. 4. Конструктор конфигов отрабатывает успешно. Не падает. Цель - достигнута. Опция успеха подключения к БД - это уже вторая задача и ее надо изучать отдельно от первой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 16:29:01 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
MasterZiv PetroNotC Sharp petrav, Нужно делать конструктор всегда гарантированно без исключений. Простое правило. Отсюда вытекает доп функция инициализации Ну , есть такой подход, но там по-другому -- конструктор не должен ничего сложного делать (типа чтения файла). Почему же не должен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 18:40:33 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
MasterZiv petrav Философский вопрос. Пример надуманный, но демонстрирует проблему. Допустим у нас есть класс настроек, который читает данные из .ini файла. У нас есть два варианта для инициализации и обработки ошибок: 1) Функция инициализации возвращающая признак ошибки. 2) Или исключение вылетающие из конструктора. В варианте № 1 в деструкторе нужно следить, а были ли мы успешно прочтены и только тогда сохранять изменения. В варианте № 2 это делать не нужно. В варианте № 2 такой объект нельзя сделать глобальным. Вот что предпочтительнее в общем случае? А почему если исключение, то обязательно вылетающее из конструктора? Почему нет варианта "функция инициализации, выбрасывающая исключение" ? Потому что мои два варианта отличаются фундаментально: в случае возникновения ошибки объект настроек или сконструирован, или же нет. Ваш третий вариант ничего филосовски нового не привносит. Кстати, вариант с функцией инициализации тем фундаментально-то и плох: сконструирован объект в некорректном состоянии. И он в таком состоянии доступен остальным объектам. MasterZiv Что сложного в проверке "а были ли мы успешно прочтены и только тогда сохранять изменения." ? Не сложно. Но мы тут просто рассуждаем. То да сё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 19:03:12 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
petrav MasterZiv пропущено... Ну , есть такой подход, но там по-другому -- конструктор не должен ничего сложного делать (типа чтения файла). Почему же не должен? Не масштабируемо. Не потокоустойчиво. Не дуракоустойчиво ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 19:15:17 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
petrav, >объект настроек или сконструирован, или же нет Ты собрался стоить главное окно приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 19:19:41 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
PetroNotC Sharp petrav пропущено... Почему же не должен? Не масштабируемо. Не потокоустойчиво. Не дуракоустойчиво А почему не потокоустойчиво? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 20:10:37 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
mayton, Ну какие Райзе в потоках ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 20:24:48 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
PetroNotC Sharp mayton, Ну какие Райзе в потоках Заратустра не велит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 21:36:00 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
petrav, Я бы исходил из того, насколько критично будет использовать объект с дефолтными настройками. Но в любом случае надо как-то юзеру или клиентскому коду дать понять что инициализация прошла не так как ожидалась. Init вполне может бросить исключение, вполне рабочий вариант. Ну и добавить метод IsDefault. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 22:00:39 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Тут - вопрос смыслов. Что вернет конструктор. Конструктор не может вернуть недо-созданный объект. Помним RAII. Конструктор конфигурации - должен вернуть конфигурацию. Значит - безсмысленно возвращать конечный автомат который ждет вызова какой-то функции которая еще что-то будет делать типа init и прочее. Если вы - делаете так - тогда меняйте смыслы. Переименовывайте этот объект в парсер конфигураций. Вобщем как говорил кэп Врунгель - как вы яхту назовёте - так она и плывет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 22:05:40 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
mayton, Тут получается да, один объект порождает другой. Т.е. если совсем не смогли прочитать ini файл то можно вернуть нулевой указатель на объект с конфигурацией, если смогли прочитать только часть то можно сгенерировать развёрнутый эксепшен и дальше уже решать что делать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 22:13:38 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
L.Otujktd, Что значит не смогли прочитать? Отсюда и идёт вилка вариантов на миллион. 15 причин и 15 путей решения. Чё их все тут в топике обсуждать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 22:20:30 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Он в шапке пишет - "Философский вопрос..." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 22:24:07 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
mayton, Ага. Вопросы философии которые нельзя применить на практике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 22:39:05 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
mayton, У меня сейчас прога в систрее переключает раскладку клавы. Периодически при старте системы антивирус грохает её ini файл. Потом она грузится и печально пишет: "не найден файл настроек. Восстановить из копии"? Все логично, ясно и понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 22:43:17 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
PetroNotC Sharp mayton, У меня сейчас прога в систрее переключает раскладку клавы. Периодически при старте системы антивирус грохает её ini файл. Жалко, что этот антивирус при каждой загрузке ОС тебе не грохает все средства разработки как потенциально вредное и небезопасное в твоих руках ПО (разработки). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2021, 23:11:02 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
petrav PetroNotC Sharp пропущено... +1 Как раз показывает что теоретический вопрос разбивается о практику. Если удалили ini файл, это не значит что мы должны застопорить ИС. И сообщить всегда можно все что угодно. Логика может быть такая, что если настройки не корректны или отсутствуют, то мы и не работаем. Потому что работа со значениями по умолчанию бессмысленна или даже вредна. petrav, Твое? Твою логику никто не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2021, 07:09:02 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
mayton Dimitry Sibiryakov Где-то в глубинах корпоративной сети стоит сервер на котором крутится Самая Главная База. Какие настройки ты пропишешь по умолчанию для подключения к ней? Пишешь Код: plaintext 1. 2. 3. 4. Конструктор конфигов отрабатывает успешно. Не падает. Цель - достигнута. Опция успеха подключения к БД - это уже вторая задача и ее надо изучать отдельно от первой. Это то о чём я и говорю: дальнейшая работа бессмысленна. А иногда и вредна. Допустим в поле host у нас ошибка, IP записан так: 12.12.12-12. Запускаемся, отображаем MsgBox о том, что ошибка в конфиге. И заменяем IP на localhost. Пользователь думает: чё это было, дайка винду перезагружу. Перезагружается, а там уже localhost в настройках записано! И никаких ошибок уже не отображается. Он нажимает Connect. Ошибка. И теперь пользователь думает: сеть барахлит, дайка я отдохну пока они БД поднимают, ведь работа невозможна, все отдыхают. Вот зачем такое? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2021, 10:18:43 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
petrav, >Допустим в поле host у нас ошибка, IP записан так: 12.12.12-12. == ошибки из воздуха не появляются. Файл ini это не мусора. Не можешь работать с ini бери субд или xml с валидацией по схеме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2021, 10:26:10 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
petrav mayton пропущено... Пишешь Код: plaintext 1. 2. 3. 4. Конструктор конфигов отрабатывает успешно. Не падает. Цель - достигнута. Опция успеха подключения к БД - это уже вторая задача и ее надо изучать отдельно от первой. Это то о чём я и говорю: дальнейшая работа бессмысленна. А иногда и вредна. Допустим в поле host у нас ошибка, IP записан так: 12.12.12-12. Запускаемся, отображаем MsgBox о том, что ошибка в конфиге. И заменяем IP на localhost. Пользователь думает: чё это было, дайка винду перезагружу. Перезагружается, а там уже localhost в настройках записано! И никаких ошибок уже не отображается. Он нажимает Connect. Ошибка. И теперь пользователь думает: сеть барахлит, дайка я отдохну пока они БД поднимают, ведь работа невозможна, все отдыхают. Вот зачем такое? :) Я тебе просто принцип показал. И IP адрес не имеет значения. Ты мог добавить свойство Код: plaintext 1. И приложение будет пропускать попытку коннекта, сообщаяя пользователю что конфигурация еще не завершена. Как отображать - это другая тема, которая к топику не имеет отношения. Главная цель достигнута. Твой конструктор не падает. Ты ведь этого хотел? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2021, 10:54:12 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
mayton, Когда это у меня конструктор падал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2021, 11:04:10 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Давай в начало вернемся. В твой самый первый филососфкий пост. Ты пишешь про бросание исключений из конструктора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2021, 11:15:35 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
mayton Давай в начало вернемся. В твой самый первый филососфкий пост. Ты пишешь про бросание исключений из конструктора. Исключение из конструктора — это не падение конструктора. Это не проблема. Это приём программирования: если объект не может быть создан корректно, то он и не создаётся. И соответственно в последствии не разрушается. В этом и есть вопрос: стоит ли этим пользоваться в подобных ситуациях. Не стоял вопрос: у меня конструктор падает, памагите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2021, 11:29:32 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
petrav, Тебе вроде ответили несколько человек что есть практика гарантированно создавать объект. Ты им не поверил. Для упрямых говорят - сам себе ССЗБ... Я в детстве тоже не создавал и потом по всему коду был без настроек и на null проверял. ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2021, 11:40:25 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Насколько я помню Мейеса, исключение, выброшенное конструктором, исключает и вызов деструктора. Или модерновые плюсы стали настолько продвинутыми, что могут сами разобрать(ся) какие куски деструктора вызывать, а какие нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2021, 12:30:52 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov Или модерновые плюсы стали настолько продвинутыми, что могут сами разобрать(ся) какие куски деструктора вызывать, а какие нет? Нет, ничего не изменилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2021, 12:48:37 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
PetroNotC Sharp petrav, Тебе вроде ответили несколько человек что есть практика гарантированно создавать объект. Ты им не поверил. Для упрямых говорят - сам себе ССЗБ... Я в детстве тоже не создавал и потом по всему коду был без настроек и на null проверял. ))) Послушай, мой малограмотный дружочек, можно тебя попросить не отвечать на мои посты? Ну ты реально достал уже своим бессодержательным флудом. Модератор: Джентльмены. К порядку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2021, 12:51:35 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
petrav, Покажи, кто понял тут твои метания))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2021, 13:07:52 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Он спросил. Что предпочтительнее. Я думаю что оба варианта плохие. Но мне нравится более атомарный вариант класса конфигурации когда конструктор делает 100% подготовительной работы и не падает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2021, 13:11:49 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
mayton, 1. Всем нравится когда конструктор не падает. Кроме ТС. 2. Из вопроса надо исключить подвопрос конфигурации. Тогда делай свои первый или второй вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2021, 13:16:58 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovНасколько я помню Мейеса, исключение, выброшенное конструктором, исключает и вызов деструктора. Или модерновые плюсы стали настолько продвинутыми, что могут сами разобрать(ся) какие куски деструктора вызывать, а какие нет? Они достаточно продвинутые чтобы вызвать деструкторы только тех вложенных/родительских объектов, конструкторы которых отработали нормально. И да, ответ на вопрос топика прост: если надо предотвратить создание объекта - используется исключение. Надо чтобы объект всегда создавался - не используется исключение. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2021, 14:01:21 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
mayton Он спросил. Что предпочтительнее. Я думаю что оба варианта плохие. Но мне нравится более атомарный вариант класса конфигурации когда конструктор делает 100% подготовительной работы и не падает. Ваш вариант не слишком приемлем. 1) Грузятся бессмысленные дефолтные настройки. 2) Нужно следить что бы эти дефолтные значения не записались в ini файл. 3) При старте определённого функционала нужно следить не опирается ли он на бессмысленные дефолты? И если да — MsgBox и отказ. А если это дефолтное значение редактируется через GUI? Вот что выводить на форму? Бессмысленное дефолтное значение или ошибочное значение которое прочитали из ini? Зачем мы вообще заменяли на дефолты? Трудозатратно. С каждым значением возиться нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2021, 21:53:01 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Чукча ТС не читатель. Он писатель.... и первый раз видит кнопку Настройки - По умолчанию LOL))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2021, 07:22:47 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
mayton Он спросил. Что предпочтительнее. Я думаю что оба варианта плохие. Но мне нравится более атомарный вариант класса конфигурации когда конструктор делает 100% подготовительной работы и не падает. Удивительно как 3 страницы люди ни о чем говорят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2021, 07:26:18 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
mayton, Предложи ему статический метод класса возвращающий экземпляр себя. Там будет проверки в первых строках и потом конструктор. Уж эти 3 варианта удовлетворяет любого новичка - coctructor - init - static createInstans ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2021, 07:34:56 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Статический метод? Зачем. Он не добавляет ничего к тому что было уже сказано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2021, 13:17:49 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
mayton Статический метод? Зачем. Он не добавляет ничего к тому что было уже сказано. авторУ нас есть два варианта для инициализации и обработки ошибок: 1) Функция инициализации возвращающая признак ошибки. 2) Или исключение вылетающие из конструктора. В первом или втором? Или ТС такой косноязычный? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2021, 13:45:39 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Я не хочу сильно погружаться в эту тему. По ней мало инфы. Нет даже названия этого класса. А все теоретики ООП говорят о том что имя - должно быть звучащим. Оно должно значить. Например "Properties" или "PropertyParser". В зависимости от этого другие ответы по дизайну класса могут обрести смыл. А там мы пока обсуждаем шкуру медведя которого еще нету. Для случая с *Parser функция возвращающая опционал или Maybe<> может быть и была-бы полезна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2021, 14:07:06 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
mayton, Ну, если ТС спорит с нужностью default настроек и переменных, то это вообще за гранью))))) Удачи аффтару! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2021, 14:14:34 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
mayton По ней мало инфы. Нет даже названия этого класса. Я придумал выход из ситуации, который меня устраивает. Дело в том, что класс настроек у меня болтается не просто так, а управляется повторно-используемым классом синглетона. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Класс Options в конструкторе только заполняет все настройки дефолтными значениями. И класс Options реализует функцию init(). Но если IsAllowDefault == false в целом синглетон ведёт себя так, как будто из конструктора Options при ошибке вылетело исключение. А если IsAllowDefault == true, то синглетон ведёт себя так, как будто была вызвана функция init(). Т.е. двумя вариантами реализации из моего первого поста я управляю настраивая класс Singleton. И могу легко переключаться между поведениями: 1) исключение из конструктора 2) вызов функции init(). Приятно, то что функция Options::save() вызывается в классе Singleton. Т.е. в классе Options не нужно следить за тем, а были ли мы успешно загружены, а если были то в деструкторе Options вызовем save(). И виртуальный метод Options::save() нужно было вызывать именно в деструкторе клиентского класса Options, этот метод нельзя было вызывать в деструкторе базового класса OptionsBase, по понятным причинам. Теперь деструктор Options пустой. И теперь всем жизненным циклом управляет класс Singleton и поведение настраивается через шаблонные параметры этого класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2021, 17:53:09 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Ужас. Синглетон счас наверно только сишники остались используют) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2021, 18:14:27 |
|
||
|
Функция инициализации или исключение в конструкторе?
|
|||
|---|---|---|---|
|
#18+
petrav, авторТ.е. двумя вариантами реализации из моего первого поста я управляю настраивая класс Singleton. И могу легко переключаться между поведениями: 1) исключение из конструктора 2) вызов функции init(). Вообще то это решается не в рантайме и не набегу, а во время написания кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2021, 18:17:12 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2017254]: |
0ms |
get settings: |
15ms |
get forum list: |
25ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
49ms |
get topic data: |
23ms |
get forum data: |
6ms |
get page messages: |
149ms |
get tp. blocked users: |
3ms |
| others: | 328ms |
| total: | 612ms |

| 0 / 0 |
