Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2016, 15:06   #1
armory
Пользователь
 
Аватар для armory
 
Регистрация: 06.10.2016
Сообщений: 37
По умолчанию return и out

Ребят, щас читаю про out/ref/params и не могу понять одну вещь, может вы мне на пальцах сможете объяснить, чтобы я тугодум догнал это...
есть return, он в конце реализации этого метода возвращает значение такого типа, который мы изначально присвоили методу
а есть out, который я честно говоря ни фига не пойму; в книге написано, что это выходной параметр

к коду: есть два метода

Код:
static void n18(int x, int y, out int ans)
{ ans = x + y;}
Код:
static int n19(int x, int y)
{ return x + y;}
и есть решение в Main()
Код:
int ans;
n18(60, 60, out ans);
Console.WriteLine(("Решение задачи #18\n: {0}"), ans);
Console.WriteLine(("Решение задачи #19\n: {0}"), n19(60, 60));
результат одинаковый
так если он одинаковый, с какой целью выбирать тот или иной вариант?

спасибо
Учусь кодить на C#/Java.
Не ищу готовых решений.
Всегда благодарен вам за помощь.

Последний раз редактировалось armory; 05.11.2016 в 15:09.
armory вне форума Ответить с цитированием
Старый 05.11.2016, 15:10   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Иногда бывает нужно/удобно.

Например посмотрите на int.TryParse https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 05.11.2016, 15:23   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
так если он одинаковый, с какой целью выбирать тот или иной вариант?
Самый простой вариант: функция вовращает код ошибки и какие-то данные в параметрах.
p51x вне форума Ответить с цитированием
Старый 05.11.2016, 16:25   #4
armory
Пользователь
 
Аватар для armory
 
Регистрация: 06.10.2016
Сообщений: 37
По умолчанию

кажется я нашёл вариант после поста p51x
для варианта с out, я могу быть более гибким с типом информации, которую хочу вывести
то есть, я могу в метод напихать try/catch и возвращать string-типы информации (как раз ошибки и прочее в текстовом виде), а не только int, заданные для переменных
Учусь кодить на C#/Java.
Не ищу готовых решений.
Всегда благодарен вам за помощь.
armory вне форума Ответить с цитированием
Старый 05.11.2016, 16:37   #5
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

out нужен, когда есть несколько разных возвращаемых результатов.

Но в целом, это таки не совсем хорошо.

Мне больше нравится синтаксис кортежей в Python:
Код:
def func():
   ,,,,
   return result1, result2


Value1, Value2 = func()
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 05.11.2016, 16:38   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от armory Посмотреть сообщение
кажется я нашёл вариант после поста p51x
для варианта с out, я могу быть более гибким с типом информации, которую хочу вывести
то есть, я могу в метод напихать try/catch и возвращать string-типы информации (как раз ошибки и прочее в текстовом виде), а не только int, заданные для переменных
Это как?

int.TryParse же и есть простой пример того, что p51x описал. (только просто bool ок/не ок вместо более подробных кодов ошибки)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 05.11.2016, 16:48   #7
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Цитата:
для варианта с out, я могу быть более гибким с типом информации, которую хочу вывести
это все можно сделать и без аута
come-on вне форума Ответить с цитированием
Старый 05.11.2016, 16:54   #8
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Цитата:
Сообщение от come-on Посмотреть сообщение
это все можно сделать и без аута
Не, ну это немного не очень:
Код:
Tuple<int, string> func(){

   return new Tuple<int, string>(intvalue, stringvalue);
}


Tuple <int, string> result = func();
int res = result.Item1;
string message = result.Item2;
Слишком много надо писать.

Было бы норм вот так:
Код:
int res, string message;
(res, message) = func();
Вот такой синтаксис был бы довольно неплохим, я считаю.
a.k.a. Angelicos Phosphoros
Мой сайт

Последний раз редактировалось New man; 05.11.2016 в 16:57.
New man вне форума Ответить с цитированием
Старый 05.11.2016, 17:01   #9
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

при чем тут что было бы ? мало ли что было а что нет, есть то что есть
come-on вне форума Ответить с цитированием
Старый 05.11.2016, 17:10   #10
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Цитата:
Слишком много надо писать.
пишите через анонимы и дайнамики, будет меньше писанины ))
come-on вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Return; Мой повелитель Общие вопросы C/C++ 1 13.06.2016 17:25
Оператор "return" без значения. функции оператора "return" Алексей111083 Помощь студентам 1 17.01.2016 17:18
return Vilkas Помощь студентам 2 14.12.2014 15:26
c++ while return BaTpyXaaa Общие вопросы C/C++ 3 30.11.2013 03:57
return ZoomHz Общие вопросы C/C++ 3 10.07.2011 21:02