powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тяпничный return кортежа
25 сообщений из 29, страница 1 из 2
Тяпничный return кортежа
    #39090913
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день всем.

Возникла мысль что в некоторых ЯП весьма удобно вернуть примитивный тип, но если нужно (ну очень нужно)
вернуть пару значений примитивов то начинается шаманство и колдунство.

К примеру. Есть некая функция transform. На вход к ней передаются координаты (x,y) а на выходе
мы должны вернуть тоже пару координат после преобразований. Изменение масштаба к примеру.
Допустим также что вводить новую сущность типа Point для нас - лениво да и задачка
одноразовая.

На сях.


Код: plaintext
1.
2.
3.
void transform(double x, double y, double &xresult, double &yresult){
....
} 



Колдунства не понадобилось.

Как подобный код может выглядеть в Питонах, Шарпах, Java, и прочих этих ваших Руби и перлах?

Допустим также что возврат массивов примитивных типов - это последний и нежелательный вариант.
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39090936
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rust:
Код: plaintext
1.
2.
3.
4.
5.
fn my_func() -> (u8, bool) {
    (1, true)
}

let a, b = my_func();
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39090938
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде везде можно передавать параметры по ссылке. В C# и PHP можно.
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39090957
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, на C#
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
void transform(double x, double y, out double result, out double yresult){
....
}

// Или
Tuple<double,double> transform(double x, double y){
....
}
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39090989
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile, а как "принять" Tuple в вызывающем коде?
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39091002
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
python:
Код: python
1.
2.
def f(a,b):
  return b,a



c++
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
#include <tuple>
using namespace std;
tuple<double, double> f() { return make_tuple(1.0, 2.0); }
auto f2() {
  struct {
    double a, b;
  } s;
  s.a = 1;
  s.b = 2;
  return s;
}
int main() {
  double a, b;
  tie(a, b) = f();
  auto c = f2();
  a = c.a;
}
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39091019
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wst, согласись как-то не очень изящненько. Всё таки мы создаём структуру в scope функции.
Да и многа букв вышло. А на Питоне - гуд.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
#include <tuple>
using namespace std;
tuple<double, double> f() { return make_tuple(1.0, 2.0); }
auto f2() {
  struct {
    double a, b;
  } s;
  s.a = 1;
  s.b = 2;
  return s;
}
int main() {
  double a, b;
  tie(a, b) = f();
  auto c = f2();
  a = c.a;
}
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39091044
Гхостик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Golang.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
func test1() (int, int) {
  return 1,2
}

func test2() (x,y int) {
  x,y=1,2
  return
}
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39091046
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonа как "принять" Tuple в вызывающем коде?
Если нужны отдельные переменные xresult/yresult, то понадобится вручую "распаковать" Tuple.
Код: c#
1.
2.
3.
Tuple<double,double> result = transform(1.1, 2.2);
double xresult = result.Item1;
double yresult = result.Item2;


Если данные не нужно менять, то можно работать со свойствами Item1, Item2.
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39091095
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оно может и не изящно структуры так отдавать и вообще больше запутывает чем помогает, но не упомянуть такой способ нельзя.
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39091142
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну я не против вобщем.
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39091384
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

тут я возражаю - если у тебя есть объект Точка, то заводи объект с такими полями.
практика показывает, что потом накапливается ума методов, возвращающих Tuple и совершенно непонятно, что в них возвращается
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39091393
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как-же return FuckenList, FuckenProperties?

Или как-же парадигма программирования Lisp где ты можешь вернуть список с весьма
"либеральным" контрактом.

Что тут показывает практика?
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39091413
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКак подобный код может выглядеть в Питонах, Шарпах, Java, и прочих этих ваших Руби и перлах?

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#!/usr/local/bin/perl

sub mydiv($$) {
	($a, $b) = @_;

	if ($b ne 0) {
		$c = int($a / $b);
		$d = $a % $b;
	}
	return ($c, $d);
}

($x, $y) = mydiv(5,2);
print "x=", $x, " y=", $y, "\n";
#     x=2 y=1



А откуда вообще мысль возникла?
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39091435
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подобная мысль возникла в четверг.
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39091494
Adx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Adx
Гость
По сути вариантов немного.
Параметры по ссылке, анонимный класс, массив.
В С# анонимные классы есть, но извлечь данные вне области определения - только через reflection.
Для "лениво было сущность придумывать" не пойдет ;)
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39091518
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо. Удачных выходных.
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39091559
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39092295
Зимаргл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

ИМХО, для языков со статической типизацией больше неудобств чем пользы. Тем не менее для С++ 11 и D
- https://en.wikipedia.org/wiki/Variadic_template
только для D еще способ
- http://dlang.org/phobos/std_typecons.html#tuple

Для языков с динамической типизацией это рассадник ахудивительных ошибок.
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39092530
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
это как раз пример, когда надо использовать UDT.

Пример, когда надо вернуть кортеж, это целочисленное деление: надо вернуть частное и остаток.
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39092531
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
я потом напишу, как это выглядит на common lisp. ну и на python тоже
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39092532
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВроде везде можно передавать параметры по ссылке. В C# и PHP можно.

Гы, это и будет самый жестокий говнокод.

представь, тебе надо написать выражение с 5 делениями, и передать в каждое по возвращаемому параметру.
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39092535
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
на питон не гуд, потому что там тебя обзывают использовать оба параметра на принимающей стороне.

Гуд - в лиспе.
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39092538
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА как-же return FuckenList, FuckenProperties?

Или как-же парадигма программирования Lisp где ты можешь вернуть список с весьма
"либеральным" контрактом.

Что тут показывает практика?


это не список, а multiple value
...
Рейтинг: 0 / 0
Тяпничный return кортежа
    #39092541
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ясен пень что в Лиспе гуд.
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тяпничный return кортежа
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]