1 / 1 / 0
Регистрация: 04.05.2015
Сообщений: 42
|
||||||
1 | ||||||
Как вернуть два значения из функции?18.11.2015, 21:55. Показов 23092. Ответов 16
Метки нет (Все метки)
Ребят, нужно вернуть из функции два значения. Подскажите как. Без массива
0
|
18.11.2015, 21:55 | |
Ответы с готовыми решениями:
16
Как вернуть из функции два значения Как вернуть из функции два значения? Вернуть из функции два значения Как вернуть два значения из метода? |
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
|
||||||
18.11.2015, 22:02 | 2 | |||||
0
|
116 / 115 / 64
Регистрация: 03.06.2013
Сообщений: 582
|
||||||
18.11.2015, 22:03 | 3 | |||||
а можно так :
0
|
18.11.2015, 22:16 | 4 | |||||||||||||||
Можно так:
Вернуть из метода. Добавлено через 2 минуты Можно так:
Правда второй вариант имеет смысл, если называть свойства осмысленно, иначе от Tuple не особо отличается. Добавлено через 4 минуты Кстати, для этого конкретного случая подошла бы структура, а не класс. Два типа значений (value type) потому что. Хотя зависит от того, как это будет использоваться.
0
|
116 / 115 / 64
Регистрация: 03.06.2013
Сообщений: 582
|
|
18.11.2015, 22:28 | 5 |
Если человеку надо один это сделать зачем ему отдельный класс и структура.
Добавлено через 1 минуту С Turple<> соглашусь, что отличный метод, особенно если нужно вернуть значений штук 5.
0
|
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
|
|
18.11.2015, 23:05 | 7 |
0
|
19.11.2015, 08:16 | 8 | |||||
Я где-то уговаривал использовать отдельный класс? Смотря какой проект и вообще от ситуации зависит. Я на работе вносил изменения в один большой проект, так как на работе принцип простой (новая работа) - разбирайся сам. То когда ты вносишь изменения толком не понимая что для чего в этой программе и видишь, как в метод передают Dictionary, Value которого это KeyValuePair, то чтобы ничего не перепутать и не накосячить объявляешь класс, в котором создаёшь 3 именованных свойства и теперь этот класс, как Value у Dictionary (вместо KeyValuePair). Ну и дальше используешь везде этот класс. И с таким подходом уже нереально, что-то дальше напутать, чем с бесконечным множеством вложеных каких-то непонятных пар ключей значений.
Добавлено через 3 минуты Всякие Tuple и 5 значений удобно использовать особенно во всяких лямбдах, когда ты чётков видишь, что ты только что в Tuple запихал и рядом в другой лямбде это оттуда вытаскиваешь. Ну и ещё некоторые ситуации. Добавлено через 3 минуты Я об этом:
Многие почему-то не понимают или забивают, что важна читабельность кода, чтобы сразу было всё понятно. А не понты - смотрите, как я умею использовать словарь и знаю о структуре такой-то и давайте я этот словарь прокину ещё в 10 методов и вы думайте потом там, что я прокинул (причём самый первыйметод гигантский, в котром происходят манипуляции с этим словарём в 5 разных циклах, каждый размером с мой монитор в высоту. Это если ты пишешь софт, то проблем нет. А если потом его изучать другому человеку, то это будет, как минимум, неудобно.
0
|
Master of Orion
|
|
19.11.2015, 09:02 | 9 |
Если человеку нужно вернуть значений 5, то тупл тут как раз-таки вообще не к месту. Плохо, что их сделали до 8 параметров, на 3-4 надо было остановиться.
Выше написали, свой класс/стандартный Tuple<>. Все эти out с точки зрения ООП полная ересь.
0
|
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
|
|
19.11.2015, 09:13 | 10 |
а страдать ООП головного мозга еще большая ересь, кто знает может у него обычная задача в которой ООП как лишняя 3 нога
как вариант использовать в функции класса ref (C# Reference) для параметра(ов)
0
|
Master of Orion
|
|
19.11.2015, 09:17 | 11 |
агерон, какая разница, ооп или нет? в ФП так вообще функция мало того, что должна возвращать только одно значение, так еще и состояния не должна иметь.
Да и в принципе, лучше кушать ртом, а в туалет ходить другим местом, и не путать эти два понятия. А возвращать данные через входные параметры - это именно оно и есть. Открою тайну: ref и out в язык добавили только для того, чтобы проще было вызывать PInvoke-код.
0
|
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
|
||||||
19.11.2015, 09:55 | 12 | |||||
_Denis__, держи студент
Psilon а может нужно спуститься с небес на грешну землю и признать что за вашу так любимую функциональщину просто не платят в массе своей денег? и что каждому инструменту свое время и место, а не выпячивать ООП - шность языка во главу угла Добавлено через 5 минут P. S. передача параметра по ссылке это не новое изобретение и ref и out оставлены для совместимости не просто так может вспомним что такое стек и как с ним работать да и бинарный код с асмом тоже забывать не стоит
0
|
Master of Orion
|
|
19.11.2015, 10:02 | 13 |
А, так мы по производительности теперь будем рассуждать?
А по производительности тоже лучше структуры использовать, ибо кэш-линия всего лишь 64 байта, а т.к. локальные данные компилятор может как угодно раскладывать, не факт, что они попадут за один memory call, когда как структура всегда будет. Хотя о чем я говорю, от void-метода с ref-параметрами веет таким седым винапи, что страшно становится Добавлено через 46 секунд бинарный код с асмом - это кстати для красного словца вставлено? Ибо это одно и то же.
0
|
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
|
|
19.11.2015, 10:23 | 14 |
Бинарный (Двоичный код) , Что такое ассемблер к сожалению бинарный код и ассемблер это не одно и тоже и я не призываю на них писать я просто прошу не забывать что такое Процедурная парадигма т. к. реализацию к примеру сетевого стека 4 уровня OSI на oCaml не напишешь, еще раз повторяю каждому инструменту свое время и место в данной конкретной задаче ref или out отлично решают проблему возврата результатов вычислений без излишней сложности в виде ООП, на последок прошу вспомните что такое бритва Оккама и угомонитись
0
|
484 / 439 / 123
Регистрация: 05.01.2010
Сообщений: 1,848
|
|||||||||||
19.11.2015, 10:43 | 15 | ||||||||||
чисто мое мнение: out уместен только в методах типа
0
|
Master of Orion
|
|
19.11.2015, 11:04 | 16 |
Во-первых ссылаться на википедию как авторитетный источник - так себе идея.
Во-вторых Ассемблер по-определению это просто мнемоничесая запись двоичного кода. То есть add eax ebx и 0241244 это одно и то же, просто записанное на разных языках. Корова и Cow - это тоже разные понятия? В-третьих oCaml тьюринг-полный язык, и на нем можно написать все что угодно, хоть винду со всеми фреймворками впридачу. Добавлено через 3 минуты Видал я проекты на десятки мегабайт с таким подходом, в котором потом сами авторы не могли разобраться, что же куда передается. Вместо грамотной архитектуры - груда костылей. Вместо красивого функционального подхода - возня с байтиками, хотя на дворе 21 век... Ну да, я помню тоже на первом курсе счетчик цикла всегда делал byte, и возмущался, что обычные программисты - транжиры!!! - делают его int, тратя в 4!!!! раза больше места, хотя значение переменной всегда уложится в byte... Потом немного поумнел, но это другая история.
0
|
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
|
|
19.11.2015, 11:26 | 17 |
1) видимо вы внятно не читали указанные ссылки
будь у меня на то желание можно написать программу и в троичном (-1,0,1) коде + для него же придумать свой ассемблер, 2.1) ассемблер язык - язык мнемоник упрощающих кодирование инструкций в троичном коде 2.2) ассемблер - программу сборщик обьектных модулей 2.3) линковщик (редактор связей) который из обьектных модулей соберет исполняемый файл по секрету скажу в том же c# есть и ассемблер и линковщик, ассемблер - IL.exe а вот линковщик не помню как называется 3) ну давайте дерзайте пишите, но только полнофункциональную версию со всеми плюшками, а я возьму побольше колы и попкорна и посмотрю на этот бессмысленный и беспощадный цирк а потом скачаю что то Linux подобное если мне захочеться поэксперементировать, не забывайте что по мере написания ОС на oCaml вам нужно a) одеваться b) питаться c) оплачивать счета KolibriOS вот тут таки пытаються на асме что то делать и даже получается, ну думаю у вас как программиста на супер удобном функциональном языке уйдет ну лет 25-30 и вы выйдете на уровень поддержки железа как в современной Kolibri только не забывайте про пункты a) b) c) еще раз повторяю не флудите и не пытайтесь доказать что вы правы, вы не правы изначально т. к. несмотря на то что C# ООП язык, сама предоставленная задача по вычислению 2 дробных чисел по известным формулам в ООП не нуждается, а значит ООП и функциональщина именно в данном конкретном случае никому не нужный и вредный оверхед
0
|
19.11.2015, 11:26 | |
19.11.2015, 11:26 | |
Помогаю со студенческими работами здесь
17
Как вернуть два значения через return? Как вернуть 2 значения из функции? Как вернуть сразу 2 значения из функции? Как вернуть сразу 2 значения массива в функции? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |