|
1 / 1 / 1
Регистрация: 24.03.2013
Сообщений: 177
|
|
Что такое обертка функции?19.09.2015, 00:28. Показов 12276. Ответов 40
Метки нет (Все метки)
дана функция на входе получает 2 параметра имя и возраст.
srting children(string ima, int age) Нужно написать обертку, для тестирования входящих параметров. Правильно ли понимаю, что нужно написать функцию допустим test на входе получаем 2 параметра имя и возраст, в данной функции выполняется проходит проверка, что имя не пустая строка, состоящая из символов, без цифр и спец. символов, возраст не отрицательное число. bool test(string ima, int age) На выходе true/false подходит ли данный набор для функции children. Меня смущает слово ОБЕРТКА, не совсем понимаю значение этого слова, если я не прав - поправьте меня
0
|
|
| 19.09.2015, 00:28 | |
|
Ответы с готовыми решениями:
40
Что такое Функции в C++ Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами? Что такое прототип функции? |
|
Неэпический
|
|||||||
| 19.09.2015, 00:35 | |||||||
0
|
|||||||
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
|
| 19.09.2015, 00:45 | |
|
по хорошему проверкой параметров должна заниматься сама функция children а не какая-то обертка.
если параметры не норм - то не вызываем? если изначально функция children написана криво, не следит за корректностью своих параметров и нет возможности ее исправить - то да, в такой обертке появляется смысл. из боевого кода ее вызывать опасно, а если в во всех местах вызова проверять их корректность - то это копипаста и ничего хорошего. правильно будет вызывать такую вот корректную обертку.
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 19.09.2015, 00:53 | ||
|
проверять должна и вызывающая, и вызываемые стороны. проверять нужно и предусловия, и постусловия. каждую функцию нужно стремиться делать инвариантной. а это значит: вызываемая функция не должна доверять и закладываться на корректность вызывающей стороны. а вызывающая сторона не должна закладываться на корректность вызываемой.
0
|
||
|
Неэпический
|
|||||||
| 19.09.2015, 00:54 | |||||||
0
|
|||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||
| 19.09.2015, 01:00 | ||||||||
|
Добавлено через 3 минуты
без пенальти на бою.
0
|
||||||||
|
Неэпический
|
|||||||
| 19.09.2015, 01:01 | |||||||
|
hoggy, разве что во время тестирования и отладки.
прикиньте
0
|
|||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 19.09.2015, 01:02 | |
|
0
|
|
| 19.09.2015, 01:02 | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 19.09.2015, 01:03 | ||
|
релизу предшествует длительный дебаг и тестирование, в ходе которых большая часть прострелов успешно отлавливается. чего не скажешь о ситуации, когда страховки нет вообще.
0
|
||
|
Неэпический
|
|||
| 19.09.2015, 01:06 | |||
понятное дело, что при отладке нужно проверять.
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 19.09.2015, 01:13 | |||
|
обычная практика - кидаться исключениями, валидируя весь паблик.
0
|
|||
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
|
| 19.09.2015, 01:14 | |
|
ну какое-то спорное утрверждение на счет не закладываться на корректность вызываемой функции.
т.е. пишем обертку в которой все-таки проверяем входные параметры и передаем их дальше если все ок и пытаемся вызывать везде эту обертку. но следуя этому же правилу - не доверяем корректности этой обертке и снова проверяем. либо в третей и так далее, либо везде в коде перед вызовом. далее надо еще умудрится не накосячить с этими проверками и т.п. на корректность хоть чего-то все-таки надо закладываться и как я и написал - если функция не корректно ведет себя при всех наборах данных - пишется корректная обертка и далее везде используется она с закладкой на ее корректность. иначе сами понимаете, получается полная хрень.
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
| 19.09.2015, 01:22 | ||||||
|
в остальном вы все правильно поняли. вызываемой стороне нельзя доверять. равно, как и вызывающей. вызываемая функция делает для нас работу. она знает, какую работу она должна сделать. а мы (вызывающая сторона) знаем, какой результат мы хотим получить. проверяем предусловие. работаем. проверяем постусловие. и так на каждом этаже. баги исправляются. делать обертку над функцией, которая работает с ошибками - это:
0
|
||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 19.09.2015, 01:26 | ||
|
сишное апи возвращает код. смысл не в том, как сообщить об ошибках вызывающей стороне. а в том, что бы при всей некорректности вызывающей стороны, не крашнуться по вине вызываемой стороны. вызываемая сторона не должна делать работу с кривыми данными на руках, использование которых может погубить приложение.
0
|
||
|
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
|
|
| 19.09.2015, 01:31 | |
|
hoggy, Croessmah, не хотел создавать новую тему:
в каких случаях применяется такое скрытие реализации?
0
|
|
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
|
| 19.09.2015, 01:37 | |
|
т.е. вы предлагаете писать функции, которые ведут к UB в случае, если им передали параметры, на которые они не рассчитывают, а не которые устойчивы к любому набору входных параметров. и предлагаете обеспечить корректную работу всей программы за счет предварительных проверок перед вызовами функций. как-то это не айс. вот если такие функции функции имеются - как раз чтобы этими проверками везде и всюду не заниматься и делаются подобные обертки, чтобы всю эту рутину утилизировать. в противном случае в коде будет тьма захламляющих проверок.
Добавлено через 1 минуту указанное сокрытие саттер вроде и расписывает дальше или перед этой рекомендацией. зачем тут этот вопрос задавать.
0
|
|
|
Неэпический
|
|
| 19.09.2015, 01:40 | |
|
Хулиган, это Вы Майерса читаете? Если нет, то можете почитать у него.
0
|
|
| 19.09.2015, 01:40 | |
|
Помогаю со студенческими работами здесь
20
Что такое ссылки на функции? Что такое виртуальные функции?
Что означает такое обьявление функции? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|