Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
1. map(f) передаёт в f не только элемент x, но и его индекс и весь массив
2. parseInt принимает не только строку, но и основание
Числа преобразуются в строку, а потом парсятся с системой счисления, равной индексу в массиве: 0, 1, 2, 3, 4, 5.
>IsOneOf(params TypeOfWord[] types) {
> foreach (var type in types) {
> return types.Any(type => Is(type));
По треду O(N) решения. Эээх.
А если это енум, а это обязан был енум. Так вот если это енум (сиподобный) можно битовую масочку сделать.
А в жабе из каробки enumset внутри себя так и работает.
Во-1 в оп-посте N чуток побольше.
Во-2, даже при N=2 можно избавиться от бранчинга и перепитушни цикла, а также создания массива и "всего-лишь" в 2 раза ускорить код.
Это в жабе енум няшный, с именованными и пронумерованными элементами.
А в шарпе он же как сишный, всё вручную нумеровать (либо юзать дефолт и надеяться, что никто не будет нумеровать, а маски юзать со сдвигом)... Неидиоматично как-то получается.
Ну обычный сишный енум. А [FlagsAttribute] просто разрешает ложить в него не только элементы, но и их кобенации (которые в сишке приходилось сувать в какой-нибудь безликий int).
Просто премию Тьюринга этому человеку за лучшее имя переменной
Енум небось
ты нормальный вообще?
Что-то вроде этого в лексере clang видел. А так ничего страшного.
params - это вариадик аргументы?
Берём plain old C
enum{
Number=1
,Operator=2
,Bracket=4
,Space=8
} TypeOfWord
auto isOneOf(types,type) {
return types &type ;
}
isOneOf(Number & Operator, myType)
>isOneOf(Number | Operator, myType)
ШОК: код стал короче и читабельнее.
a => b => a + b
Нет, там нет таких унылых динамикопроблем.
Что это за блядство?
2. parseInt принимает не только строку, но и основание
Числа преобразуются в строку, а потом парсятся с системой счисления, равной индексу в массиве: 0, 1, 2, 3, 4, 5.
Лишние параметры тупо отбрасываются?
ЧЯДНТ?
Это как?
Только в случае parseInt числа в строку переводятся перед парсингом.
> types.Any(type.Is)
Господа, а кто такой type и откуда он взялся?
> foreach (var type in types) {
> return types.Any(type => Is(type));
По треду O(N) решения. Эээх.
А если это енум, а это обязан был енум. Так вот если это енум (сиподобный) можно битовую масочку сделать.
А в жабе из каробки enumset внутри себя так и работает.
Для N=2
Во-2, даже при N=2 можно избавиться от бранчинга и перепитушни цикла, а также создания массива и "всего-лишь" в 2 раза ускорить код.
См. п. 2
А в шарпе он же как сишный, всё вручную нумеровать (либо юзать дефолт и надеяться, что никто не будет нумеровать, а маски юзать со сдвигом)... Неидиоматично как-то получается.
Ну сдвиги есть. Думаю можно метод нацепить
int mask(){ return 1<<ordinal();}
В жабе вот что очень няшное:
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/RegularEnumSet.java#RegularEnumSet
This API supports the product infrastructure and is not intended to be used directly from your code.
Не, там реально какая-то дрочь. 3.5 метода. Жабовский реально удобно, для людей сделан.