powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Четверговый сахарок
37 сообщений из 37, показаны все 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
Четверговый сахарок
    #39261809
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noukropвсем.

особенно тем, что список стран может расширяться и сокращаться в рантайме.
Ну ладно-ладно. Специально для злого noukrop я чуть позже приведу другой пример
из суммы прописью.
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261818
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonУ меня дежа-вю. Такое ощущение что сам Луговский вернулся :)
Тоже унылые набросы кидал? )))
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261832
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonя чуть позже приведу другой пример из суммы прописью.
там вообще IN не надо, массивами все делается.

offtopЗагуглил "сумма прописью C#" первая ссылка какой-то хардкод в стиле 1С
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261885
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, хм... странно раньше я нагугливал тонну сорцов на тему "Суммы" а щас - только онлайн-сервисы.
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261886
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskymaytonУ меня дежа-вю. Такое ощущение что сам Луговский вернулся :)
Тоже унылые набросы кидал? )))
Почему унылые? Наборот достаточно яркие. В архивах ПТ можно найти.
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261891
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tтам вообще IN не надо, массивами все делается.
Зачем массивы? Не нужно массивов. Я-же говорю. Это - сахарок.

Ты пишешь
Код: plaintext
1.
if (x==3 || x==7 || x==13 .... ){... }


А я предлагаю конфету. Не функция. Не поиск в set. Не цикл. А просто сахарок.

Код: plaintext
1.
if (x in (3,7,13,...)){...}
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261904
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ХЗ, надо ли оно там?
там по двум последним цифрам окончание выбирается:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
if(r1 != 1 && r0 == 1) {
   ... рубль
} else if(r1 != 1 && r0 >= 2 && r0 <= 4) { 
   ... рубля
} else {
   ... рублей
}


можно конечно
Код: plaintext
1.
} else if(r1 != 1 && r0 in (2,3,4)) { 


но операций больше.
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261907
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для JavaScript гуглится неплохо алгоритм. Но там есть реализации на хештабличках.
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261914
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно с массивом
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
int ends[10] = {2,0,1,1,1,2,2,2,2,2};
char* words[3] = {"рубль", "рубля", "рублей"};
char* word;
if(r1 == 1) {
   word = words[2];
} else {
   word = words[ends[r0]];
}
printf(word);
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261939
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-хорошему надо собирать все в массив и его использовать. Во всех ЯП есть способ проверить содержится ли значение в массиве. Т.е.
Код: c#
1.
2.
3.
4.
5.
static string[] en_country = new string[] { "US", "GB", "AU" };

...
if (en_country.Contains(country))
    lang = "en";
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261942
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПочему унылые? Наборот достаточно яркие. В архивах ПТ можно найти.
Так я про наброс в этом посте ))
...
Рейтинг: 0 / 0
Четверговый сахарок
    #39261958
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskymaytonПочему унылые? Наборот достаточно яркие. В архивах ПТ можно найти.
Так я про наброс в этом посте ))
Давай не развивать тему "наброса". Я пятнично пошутил. Оратор не ответил. Инцедента нет.
...
Рейтинг: 0 / 0
37 сообщений из 37, показаны все 2 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Четверговый сахарок
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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