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

Всегда хотел иметь вот такой вот инфиксный оператор

Код: javascript
1.
2.
3.
if (country in ("US","GB","AU")){
   lang="en";
}


Имеет право на жизнь сабж?
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261402
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

В SQL живёт
Стало быть право на жизнь имеет
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261441
инфиксный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonПривет человеки.

Всегда хотел иметь вот такой вот инфиксный оператор

Код: javascript
1.
2.
3.
if (country in ("US","GB","AU")){
   lang="en";
}


Имеет право на жизнь сабж?

Так можно:
http://ideone.com/uYitwb

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
int main(void) 
{
	std::string lang, country = "GB";

	if (country == in ("US","GB","AU")){
		lang="en";
	}

	std::cout << "lang = " << lang << std::endl;

	return 0;
}


Outputlang = en
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261444
инфиксный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или даже так: http://ideone.com/OLNtmD

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
int main(void) 
{
	std::string lang, country = "GB";

	if (country == in ("US","GB","AU")) 
	{
		lang="en";
	}
	
	if (country == in (1,2,3)) 
	{
		lang="hz";
	}
	
	int a, b = 10;
	
	if (b == in (1,2,10,3)) 
	{
		lang += " +100500";
	}

	std::cout << "lang = " << lang << std::endl;

	return 0;
}


Outputlang = en +100500
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261447
инфиксный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не останавливаясь на достигнутом :)

Так даже лучше будет, с compile-time error для несоответствующих типов: http://ideone.com/PguQHi

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
int main(void) 
{
	std::string lang, country = "GB";

	if (country == in ("US","GB","AU")) 
	{
		lang="en";
	}
	
	//if (country == in (1,2,3)) lang="hz";	// compile error - deduced conflicting types
	
	int a, b = 10;
	
	if (b == in (1,2,10,3)) 
	{
		lang += " +100500";
	}

	std::cout << "lang = " << lang << std::endl;

	return 0;
}



Outputlang = en +100500
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261496
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,


Easy!

Код: java
1.
 implicit class StrWrapper(str : String) { def in(seq : Seq[String]) = seq.contains(str)} 



Получаем
Код: sql
1.
2.
3.
4.
5.
 
scala> "UA" in List("RU","EN","US","FR")
res1: Boolean = false 
scala> "RU" in List("RU","EN","US","FR")
res2: Boolean = true 
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261499
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dimonz80,


Ну и женерик. Чет сразу не сообразил.
Код: sql
1.
implicit class AnyWrapper[T](a : T) { def in(seq  : Seq[T]) = seq.contains(a)}



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
scala> 1 in List(1,2,3,4,5)
res0: Boolean = true

scala> 123 in List(1,2,3,4,5)
res1: Boolean = false

scala>  "RU" in List("RU","EN","US","FR")
res2: Boolean = true

scala> "UA" in List("RU","EN","US","FR")
res3: Boolean = false

scala> (1,2) in List((1,2),(3,4))
res4: Boolean = true

scala> (21,2) in List((1,2),(3,4))
res5: Boolean = false
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261505
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оператор не нужен, потому что могут потребоваться дополнительные параметры, касающиеся способов сравнения: регистрозависимость строк и т. п. В операторе эти параметры "пихать" некуда.

Код: c#
1.
2.
3.
4.
// "Голый" C#

if (new[] { "US", "GB", "AU" }.Contains(country))
    lang = "en";


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
// Велосипед на C#

if (Op.In(country, "US", "GB", "AU"))
    lang = "en";

......

static class Op
{
    public static bool In<T>(T value, params T[] values)
    {
        return values.Contains(value);
    }
}
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261517
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей КОператор не нужен, потому что могут потребоваться дополнительные параметры, касающиеся способов сравнения: регистрозависимость строк и т. п. В операторе эти параметры "пихать" некуда.


Логично. Только иногда легче читать/формулировать выражение именно так, как хочет ТС. Просто потому, что удобнее и читабельнее. DSL там вяские опять же. Написано же: "сахарок". Кому не нужен сахарок, пусть пишен на лиспе)))

автор"пихать" некуда.
За шарп не скажу, а в скале есть implicit'ы )))
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261524
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimonz80Кому не нужен сахарок, пусть пишен на лиспе)))Согласен. :-)
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261587
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про Scala-вский in я был вкурсе. До этого нагуглил. Но конечно интересно было заюзать его варианты
в других языках в которых инфиксный оператор не так прост в реализации (по сути булева функция)
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261741
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
инфиксный,

лучше так:
Код: sql
1.
2.
country == any_of("US","GB","AU")
country == none_of("US","GB","AU")
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261743
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чорт. Все равно знак == надо ставить.
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261763
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно так
Код: sql
1.
if(inlist(country,"US","GB","AU")) ...
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261766
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TМожно так
Код: sql
1.
if(inlist(country,"US","GB","AU")) ...


Да я от этого синтаксиса уходил. В этом и суть вопроса.
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261788
noukrop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПривет человеки.

Всегда хотел иметь вот такой вот инфиксный оператор

Код: javascript
1.
2.
3.
if (country in ("US","GB","AU")){
   lang="en";
}


Имеет право на жизнь сабж?

не имеет, потому что такие вещи должны решаться через static reference data, справочники из базы данных
что будет, если завтра туда надо будет вписать NZ?

ну понятно, что говнокодера нужно будет пинком под зад отправить в лучшем случае тестировщики, но а как правильно делать-то?
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261790
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noukrop, а при чем тут базы данных? Многие алгоритмы хард-кодят вхождение переменной в сет.

Например "сумма прописью".
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261794
инфиксный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonЧорт. Все равно знак == надо ставить.

Работает и без ==

http://ideone.com/RUuyy7
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
int main(void) 
{
	std::string lang, country = "GB";

	if (country IN ("US","GB","AU")) 
	{
		lang="en";
	}
	
	//if (country IN (1,2,3)) lang="hz";	// compile error - deduced conflicting types
	
	int a, b = 10;
	
	if (b IN (1,2,10,3)) 
	{
		lang += " +100500";
	}

	std::cout << "lang = " << lang << std::endl;

	return 0;
}
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261797
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
инфиксный, ну круть. Скала и Кресты пока рулят.

Всё остальное - оцтой.
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261798
noukrop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonnoukrop, а при чем тут базы данных? Многие алгоритмы хард-кодят вхождение переменной в сет.

Например "сумма прописью".

при том, что нужно нормальные примеры IN постать (если такие вообще существуют в природе), а не безграмотную укатайку.
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261801
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noukropmaytonnoukrop, а при чем тут базы данных? Многие алгоритмы хард-кодят вхождение переменной в сет.

Например "сумма прописью".

при том, что нужно нормальные примеры IN постать (если такие вообще существуют в природе), а не безграмотную укатайку.
А чем мой пример был неграмотный?
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261803
noukrop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonинфиксный, ну круть. Скала и Кресты пока рулят.

Всё остальное - оцтой.

кресты нифига ничем не рулят, они адски сложны и мегатормозны в компиляции.

даже простейший пример вида

Код: plaintext
1.
2.
3.
4.
5.
  int func(int param1 = 0; int param2; int param3)
...


  func(param2 => value1, param3 => value2);



вместо

Код: plaintext
1.
  func(0, value1, value2);



без абсолютно безумных 100500 строк темплейтов на бусте они осилить не в состоянии.
скучная монструозная хрень, нашпигованная шаблонными костылями в виде автоматизированной копи-пасты чуть более, чем полностью
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261804
noukrop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonnoukropпропущено...


при том, что нужно нормальные примеры IN постать (если такие вообще существуют в природе), а не безграмотную укатайку.
А чем мой пример был неграмотный?

всем.

особенно тем, что список стран может расширяться и сокращаться в рантайме.
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261807
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noukropскучная монструозная хрень, нашпигованная шаблонными костылями в виде автоматизированной копи-пасты чуть более, чем полностью
У меня дежа-вю. Такое ощущение что сам Луговский вернулся :)
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261808
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В C# еще так можно сделать
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
if (country.In("US", "GB", "AU"))
    lang = "en";

......

    public static bool In<T>(this T value, params T[] values)
    {
        return values.Contains(value);
    }
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Четверговый сахарок
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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