1с возврат нескольких значений из функции

Возврат нескольких значений из функции

Может ли кто-нибудь сказать мне, как вернуть несколько значений из функции?
Пожалуйста, уточните в каком-то примере?

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

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

Прежде всего, сделайте шаг назад и спросите, почему вам нужно вернуть несколько значений. Если эти значения не связаны каким-либо образом друг с другом (функционально или оперативно), вам необходимо прекратить и переосмыслить то, что вы делаете.

Если различные элементы данных являются частью более крупного составного типа данных (такого как почтовый адрес или позиция в заказе клиента или какой-либо другой тип, описываемый несколькими атрибутами), затем определите тип структуры для представления одно значение этого составного типа:

Do not определить структуру для сбора случайных элементов, которые не так или иначе связаны друг с другом; что просто вызовет путаницу для вас и любого, кто должен поддерживать ваш код в будущем.

Если элементы данных не являются функционально связанными, но каким-то образом связаны с операциями (например, данные плюс флаг состояния плюс метаданные об операции или элементах как часть одной операции ввода), затем используйте несколько параметров для записи. Наиболее очевидными примерами являются функции *scanf() в стандартной библиотеке. Существуют также функции strtod() и strtol() , которые преобразуют строковое представление числа; они возвращают преобразованное значение, но они также записывают первый символ, который не был преобразован в отдельный параметр:

Вы можете комбинировать эти подходы; вот пример, вдохновленный некоторой работой, которую я сейчас делаю:

Служба, запрашивающая данные о высоте, возвращает 1-мерную последовательность значений; размеры массива возвращаются как часть метаданных.

1с возврат нескольких значений из функции

С функциями возвращающими одно значение разобрался. Но как бы вернуть 2-а значения ?
В задании написано создать ф-ю, которая возвращает разность между наибольшим и наименьшим элементаим в массиве значений. Ну одно значение возвращенное это вроде как я сделал:
#include
#define Numer 7
int main(void)
int massiv( int * ogo , int ugu );
<
int res[Numer] = < 12, 23, 43, 32, 3, 34, 32 >;
int raz;
raz = massiv( res , Numer );
printf(«Вывод значений «);
>

int massiv( int * ogo , int ugu )
<
.
return Что_Либо_Только_Одно_Значение;
>
Помогите как в одной ф-ии вернуть сразу два разных значения, или все же придется делать две разные ф-ии ?

Извените в начале забыл отформатироваьт текст.

С функциями возвращающими одно значение разобрался. Но как бы вернуть 2-а значения ?
В задании написано создать ф-ю, которая возвращает разность между наибольшим и наименьшим элементаим в массиве значений. Ну одно значение возвращенное это вроде как я сделал:

Помогите как в одной ф-ии вернуть сразу два разных значения, или все же придется делать две разные ф-ии ?

Здравствуйте Mr-Twister, Вы писали:

MT>С функциями возвращающими одно значение разобрался. Но как бы вернуть 2-а значения ?
MT>В задании написано создать ф-ю, которая возвращает разность между наибольшим и наименьшим элементаим в массиве значений. Ну одно значение возвращенное это вроде как я сделал:

MT>Помогите как в одной ф-ии вернуть сразу два разных значения, или все же придется делать две разные ф-ии ?

Смотрите так же:  Прокурорская пенсия в россии

Сначала о задании: нигде в нем (в том фрагменте, что ты привел) не сказано, что надо вернуть 2 значения. Сказано: «разность», что есть одно число. А именно, ArrMac — ArrMin = то, что тебе надо вернуть (первдарительно посчитав эти самые ArrMax && ArrMin).

По сути вопроса, оторвавшись от этого конкретного задания:

Есть такая штука в С++, как передача параметров по ссылке. Этот способ в числе прочих преимуществ, о которых здесь пока говорить не будем, дает и такое: появляется возможность изменения значения переменной, объявленной в программе, внутри некоторой функции. Таким образом, появляется возможность определить у функции СКОЛЬКО УГОДНО много возвращаемых значений. Единственное, что отличает этот способ от обычного возврата значения функцией, что это делается не обычной семантикой типа y=f(x), а подругому.

В приведенном примере функция делает некоторые вычисления, при этом меняя значения своих аргументов. По окончании функции значения аргументов изменятся, тогда как, если бы они передавались по значения (а не по ссылке), по изменения внутри функции делалиcь бы с локальной копией аргументов, и значения argi не изменились бы по выходе их функции.

Совет: возврат нескольких значений из функции

Вообще говоря PHP не даёт нам возможности вернуть несколько значений из функции. В то же время мы можем вернуть массив данных и разобрать его различными способами.

В данном примере функция вернёт $var2:

Если же нам нужно оба значения можем вернуть массив и обратиться к элементам по индексу:

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: http://stackoverflow.com/questions/3451906/multiple-returns-from-function
Перевел: Станислав Протасевич
Урок создан: 27 Апреля 2016
Просмотров: 8166
Правила перепечатки

5 последних уроков рубрики «PHP»

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Подборка PHP песочниц

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

8.2. Строку с ФИО разобрать по отдельности. Как сделать одной функцией?

Буду структуру использовать, не массив.
Всем спасибо за подсказку.

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

Как функции вернуть несколько значений

Всего мнений: 22

(8) > Вообще, считаю, идеологически правильнее не изменять формальные параметры функцией. Функция в математическом смысле однонаправлена. И у неё четко разделены вход и выход.

Простой пример: код модуля стал очень сложным, хочется раскидать разные части по отдельным функциям.

Вырезаешь куски в отдельные функции, запускаешь проверку синтаксиса смотришь каких переменных не хваттае и тупо кидаешь их в параметры.

Смотрите так же:  Лицензия на операции с ценными бумагами

По частоте использования:
1. Структура, например, если нужно получить что-то связанное с объектом (периодические значения), но получать сам объект не имеет смысла.
2. Функция с параметром, определяющим значение чего будет возвращено.
3. Несколько функций.

(28) Исключение в данном случае благо. Может привести к неверной работе алгоритма, без ошибок времени выплонения.

Если функции надо вернуть несколько РАЗНЫХ значений, не объединенных семантически в какое-то целое, значит у тебя косяк в архитектуре и это две функции, а не одна.

А, если эти значения — это атрибуты какого-то одного объекта, то возвращай структуру да и всё.

(38)
> 1. Нельзя использовать автодополнение, выше вероятность опечатки
Автодополнение в 1с много где нет? это вопрос тестирования

> 2. Что бы при чтении кода понять, какие параметры могут возвращаться, приходится переходить к определению функции и читать комментарии к ней. Если они еще есть.
Для этого можно в начале функции инициировать структуру, которая нужно вернуть независимо от успешности функции

> 3. На опечатки нельзя проверить формально, надеемся на то, что упомянутое вами исключение выскочит при тестировании у разработчика, а не повалит у пользователей в том куске, который разработчик недостаточно протестировал.
Это совсем другой вопрос — вопрос тестирования.

> 3.1. А бывают еще любители избыточного использование Попытка Исключение. Получается вообще взрывоопасная смесь.

> 4. При рефакторинге могут возникнуть большие проблемы по переделке кучи мест в коде. Не решаемые полуинтеллектуальным поиском с заменой и прочими подобными инструментами.
Например какие проблемы?

(48) А возвращать в параметрах ещё отстойней.

(52) Кратко пересказать книжки М.Фаулера и Р.Мартина ?

(47) Если функция не нашла значение потому что его нет — возвращается пустое значение, если возникла ошибка из-за неверных параметров, функция должна генерить исключение. Как это исключение будет обрабатывать вызывающая сторона — уже пофиг. Если вызывающая сторона подходит ответственно к параметрам вызова функции, она не должна париться над текстом в принципе.

(54) Там много опирается на то, что функция должна делать что-то одно. А если функция должна делать что-то одно, откуда взяться чему-то второму что можно вернуть?

В общем случае, возврат нескольких значений — это массив, соответственно, структура, список и т.п. это более упрощённое понимание массива.
Но, реального возврата нескольких значений из функции всё равно нет — вы возвращаете один объект. И, самое главное, что он создаётся, а потом разрушается, что медленнее, чем если передавать эти несколько параметров в функцию или процедуру по ссылке.

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

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

Вставлю своё имхо:
Когда нужно передавать по ссылке и там менять:
1. Когда меняешь движения, дописываешь данные в таблицу, список.
2. Когда у тебя есть большая структура, которая содержит несколько параметров, которые ты будешь использовать и тебе нужно дополнить её.
3. Когда передаёшь «Отказ» и там меняешь его на Ложь.
4. Когда передаёшь форму и добавляешь на неё свои элементы.
5. Когда передаёшь МенеджерВременных таблиц.

Это то, что смог вспомнить.

Во всех остальных случаях нужно возвращать.

(79) (80) В Си как раз всё просто — если параметр передан по значению (засунут в стек), то в функции будет его копия, а если по указателю, то в функции будет указатель на переменную, которую по указателю можно менять.
А вот в Си++ появились ссылки, когда передаётся как бы значение, но внутри это реализовано как указатель — то есть то, что мы имеем в 1С, если не написали Знач.

Смотрите так же:  Защита прав потребителей вельск

И не забываем, что написав Знач, мы получим копию строки — и, если она очень длинная, то можно получить существенное замедление работы.

(91) Но, в той же java прекрасно как параметры передаются объекты-контейнеры (BOX) в которых можно менять содержимое, не меняя самого контейнера, то есть так они реализовали указатели.

Что касается передачи параметра в функцию по указателю, то в том же Си всё остаётся на уровне функции — указатель, как бы мы его не меняли, обратно не возвращается, то если является обычным входным параметром, а вот про то, на что он указывает, никто не говорил — его можно менять, получая доступ к ячейке памяти по указателю.

(88) Начнём с того, что во многих языках деление на процедуры и функции чисто условно, так как и те и другие могут иметь как выходные так и выходные параметры.
Просто у функции есть основной параметр, который только выходной.
А если смотреть на низком уровне, то все высокоуровневые процедуры и функции — это вызов кода, возвращающего код ошибки исполнения, а все параметры и результаты хранятся в отдельной области памяти.

(93) Там просто сборка мусора работает тогда, когда памяти стало очень мало — в результате — если память есть, то её будут жрать, пока не надоест. Но, есть ключи запуска, где всё это можно ограничить. И ваша java побыстрее 1С будет.

Возврат из функции двух значений

Добрый день. есть функция, которая возвращает 2 значения

всегда выводится крайнее значение.
подскажите, как вывести вывести верно значение, чтобы было
Товар1 НомерАртикулаМетро1 КодВидаТовараМетро1
Товар2 НомерАртикулаМетро2 КодВидаТовараМетро2
и т.д.

а у меня получается
Товар1 НомерАртикулаМетро2 КодВидаТовараМетро2
Товар2 НомерАртикулаМетро2 КодВидаТовараМетро2

Ошибка. Возврат значения функции
Функцию вызываю из общего модуля. Ошибка возникает при присваивании. Общий.

1с 8.2 Связка двух таблиц значений
Здравствуйте. Две таблицы значений объединено запросом , получается так.

Сравнение значений двух выборок
Здравствуйте, форумчане! Размышляю, как лучше реализовать такую штуку -.

Сравнение двух значений реквизитов
Вопрос такого характера. В шапке формы документа имеется реквизит с типов поле.

Возврат из функции двух значений
в массиве нужно выбрать минимально и максимально значения, а затем их местами.

Возврат нескольких значений из функции

Подскажите пожалуйста, как можно передать из функции 2 результата, например, в магазине есть купюры номиналом 2 и 5, пользователь вводить с клавиатуры некое число которое больше 6 и программа должна подсчитать, сколько купюр какого номинала нужно будет отдать, я программу написала, в main оно корректно работает, а вот когда перенесла код в функцию, то тут проблема, оно почему-то не переносит результаты,

Возврат нескольких значений структурной переменной
Как добиться возврата значений типа sterling? Без возврата значения всё.

Возврат 2 значений из функции с одним вызовом этой же функции
Вообщем где то в какой то игре была хукнута одна функция int function(int.

Возврат из функции двух значений
в массиве нужно выбрать минимально и максимально значения, а затем их местами.

Некорректный возврат значений из функции
В функции Main после вызова fillArrayLastSymbol выводятся не те элементы.