Re[2]: самые элитные сортировщики гномов
От: yenik  
Дата: 13.10.21 06:21
Оценка:
G>3) Тип эксепшена не тот — это не имеет значения на самом деле. Это usage\design exeptions, их не надо ловить. Достаточно чтобы эксепшен сказал что с кодом не так.

Этак можно и NullReferenceException бросать, работать-то будет. Нет, если ты выкладываешь код с пространством имён Microsoft, то надо соблюдать соглашения о кодировании Microsoft. Тут похоже, что автор "угадал" назначение NotSupportedException по названию, вместо того, чтобы заглянуть в документацию. А это неправильно.

G>Остается только GetColumnName не надо вызывать в каждой ветке, можно вызвать до if. Скорее всего тупо копипаста, в целом неопасная, так как ни вызов GetColumnName, ни его содержимое меняться не будет.


А может так и задумано.
http://rsdn.org/forum/flame.comp/8110990.1
Автор: Teolog
Дата: 12.10.21
Re[3]: самые элитные сортировщики гномов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 13.10.21 06:37
Оценка: +1
Здравствуйте, yenik, Вы писали:

G>>3) Тип эксепшена не тот — это не имеет значения на самом деле. Это usage\design exeptions, их не надо ловить. Достаточно чтобы эксепшен сказал что с кодом не так.


Y>Этак можно и NullReferenceException бросать, работать-то будет.

Нельзя. NRE это runtime exeption, а не usage. Человек, увидев NRE, не поймет что произошло.


Y>Нет, если ты выкладываешь код с пространством имён Microsoft, то надо соблюдать соглашения о кодировании Microsoft. Тут похоже, что автор "угадал" назначение NotSupportedException по названию, вместо того, чтобы заглянуть в документацию. А это неправильно.

Может они stack overflow читали https://stackoverflow.com/questions/12669805/when-to-use-invalidoperationexception-or-notsupportedexception
Re[4]: самые элитные сортировщики гномов
От: yenik  
Дата: 13.10.21 07:03
Оценка:
M>Этот код, небось, копируется со времен царя Гороха, когда switch выглядел немногим лучше if else if

Папка Microsoft.Data.Analysis добавлена 11 марта сего года. Вряд ли код существовал задолго до этого.
Re[4]: самые элитные сортировщики гномов
От: yenik  
Дата: 13.10.21 07:09
Оценка:
G>>>3) Тип эксепшена не тот — это не имеет значения на самом деле. Это usage\design exeptions, их не надо ловить. Достаточно чтобы эксепшен сказал что с кодом не так.

Y>>Этак можно и NullReferenceException бросать, работать-то будет.

G>Нельзя. NRE это runtime exeption, а не usage. Человек, увидев NRE, не поймет что произошло.

Значит, тип имеет значение. И надо следовать соглашениям.

Y>>Нет, если ты выкладываешь код с пространством имён Microsoft, то надо соблюдать соглашения о кодировании Microsoft. Тут похоже, что автор "угадал" назначение NotSupportedException по названию, вместо того, чтобы заглянуть в документацию. А это неправильно.

G>Может они stack overflow читали https://stackoverflow.com/questions/12669805/when-to-use-invalidoperationexception-or-notsupportedexception

Даже там не сказано делать, как сделал Прашантх Говиндраджан.
Re: самые элитные сортировщики гномов
От: yenik  
Дата: 13.10.21 07:37
Оценка: +1
C>Всякое я раньше видел, но это как-то особенно пробрало.
C>https://github.com/dotnet/machinelearning/blob/main//src/Microsoft.Data.Analysis/DataFrame.IO.cs#L123

На самом деле, первый метод в классе — самый стёбный.
Re[2]: самые элитные сортировщики гномов
От: Jack128  
Дата: 14.10.21 07:18
Оценка:
Здравствуйте, yenik, Вы писали:

C>>Всякое я раньше видел, но это как-то особенно пробрало.

C>>https://github.com/dotnet/machinelearning/blob/main//src/Microsoft.Data.Analysis/DataFrame.IO.cs#L123

Y>На самом деле, первый метод в классе — самый стёбный.

Хуже чем стебный, он — тормознутый. Как только мы поняли, что у нас строка в колонке — сразу на выход нужно, а они цикл по всем строчкам крутят.

updated
Посмотрел по внимательнее, а он вообще что нить кроме typeof(string) вернуть может? Чё то как то совсем плохо
Отредактировано 14.10.2021 7:22 Jack128 . Предыдущая версия .
Re[3]: самые элитные сортировщики гномов
От: yenik  
Дата: 14.10.21 11:24
Оценка:
J>Посмотрел по внимательнее, а он вообще что нить кроме typeof(string) вернуть может? Чё то как то совсем плохо

А переменная nbline — что она считает? Если номер строки, то для разных колонок получится разный номер строки.
Re[4]: самые элитные сортировщики гномов
От: Jack128  
Дата: 14.10.21 14:02
Оценка:
Здравствуйте, yenik, Вы писали:

J>>Посмотрел по внимательнее, а он вообще что нить кроме typeof(string) вернуть может? Чё то как то совсем плохо


Y>А переменная nbline — что она считает? Если номер строки, то для разных колонок получится разный номер строки.

Ну в принципе да, номер значащей строки. Для них важно определить первая это значащая строка или нет. По мне все это должно выглядеть примерно так: (+/- опечатки, пишу без IDE)

        private static Type GuessKind(int col, List<string[]> read)
        {
            Type previousType = null;
            foreach (var line in read)
            {
                if (col >= line.Length)
                    throw new FormatException(string.Format(Strings.LessColumnsThatExpected, nbline + 1));

                string val = line[col];

                if (string.IsNullOrEmpty(val) || string.Equals(val, "null", StringComparison.OrdinalIgnoreCase))
                {
                    continue;
                }

                var suggestType = bool.TryParse(val, out _) ? typeof(bool)
                    : float.TryParse(val, out _) ? typeof(float)
                    : DateTime.TryParse(val, out _) ? typeof(DateTime)
                    : typeof(string);

                if (previousType == null) 
                {
                    previousType = suggestType;
                }
                if (previousType != suggestType || suggestType == typeof(string))
                {
                    return typeof(string);
                }
            }
            return previousType ?? typeof(string);
        }



Но на самом деле — самое страшное, что у них походу нету тестов. Ибо простейший тест бы показал, что типы колонок неверно определяются.
Re[2]: самые элитные сортировщики гномов
От: white_znake  
Дата: 14.10.21 14:52
Оценка: +1
Здравствуйте, Kolesiki, Вы писали:


K>Ну так вы и не понимаете именно в силу вот таких new NotSupportedException!!

K>Ошибки всегда надо сопровождать локльным контекстом и/или кратким адекватным комментом — "при создании колонки использован неизвестный тип ДаОткудаТыВзялсяТварь".

Я как понял, то устроили порку библиотечному коду.
Так, вот, все исключения типа: NotSupportedException, ArgumentException и тд. — это исключения, возникающие из-за нарушения контракта.
В отлаженном и хорошо написанном пользовательском продукте, использующим данную библиотеку, все эти исключения не должны возникнуть.
Так, что пользователь не должен увидить библиотечные исключения. Так, что throw new ArgumentNullException(nameof({myParameter})) — это норм для библиотечного кода
Re[5]: самые элитные сортировщики гномов
От: yenik  
Дата: 14.10.21 15:03
Оценка:
J>Ну в принципе да, номер значащей строки. Для них важно определить первая это значащая строка или нет.

nbline нужно ещё для сообщения в исключении: Line {0} has less columns than expected (https://github.com/dotnet/machinelearning/blob/fb2adf84a449d48a20daae41ea52fdd5f55ce296/src/Microsoft.Data.Analysis/Strings.resx#L196)
Если встретится "null" (что является валидным значением), то строка не посчитается.
Re[2]: самые элитные сортировщики гномов
От: fk0 Россия https://fk0.name
Дата: 18.10.21 23:11
Оценка:
Здравствуйте, sergii.p, Вы писали:

C>>Всякое я раньше видел, но это как-то особенно пробрало.

C>>https://github.com/dotnet/machinelearning/blob/main//src/Microsoft.Data.Analysis/DataFrame.IO.cs#L123

SP>а что тут такого? Предлагаете писать фабрику для каждого типа? Или может мапы строить и потом по рефлексии создавать колонку? Всё одинаково плохо для такого простого примера. KIS как он есть.


А если будет 10000 разных типов? По крайней мере switch-case оптимизируется до выбора по таблице.
Но почему бы kind не свести к индексу в таблице сразу и не выбрать. Ну или мапу построить,
всяко O(log(N)) сильно лучше, чем O(N). Но O(1) вообще же лучше (выбор из таблицы). Я понимаю,
что до трёх десятков элементов это не сильно принципиально... Но вот Ctrl-C/Ctrl-V по всему коду
одно и то же 100500 раз подряд. Почему один раз в переменную не сохранить, а потом её везде
не подставить. Это какой-то треш.

И наконец зачем 100500 вариантов руками расписывать для каждого типа, если там реализация
отличается только типом. Int16DataFrameColumn.cs, Int32DataFrameColumn.cs -- это ж обезьяна
какая-то писала. Ну вот я бы шаблон какой-то бы придумал, чтоб функций само нагенерило,
а не через Ctrl-C/Ctrl-V (потому, что потом если где-то ошибка например, то её теперь
по всем 100500 файлам выискивать и править? а если интерфейс поменять -- проще повеситься).
Я в C# вообще не силён, но по аналогии с C++... А в голом C бы руками сделал какую-то
обобщённую функцию, которая с почти любым типом умеет работать (ну может ей бы ширина
типа передавалась, например).
Re[3]: самые элитные сортировщики гномов
От: Codealot Земля  
Дата: 19.10.21 00:13
Оценка:
Здравствуйте, fk0, Вы писали:

fk0>Int16DataFrameColumn.cs, Int32DataFrameColumn.cs -- это ж обезьяна

fk0>какая-то писала. Ну вот я бы шаблон какой-то бы придумал, чтоб функций само нагенерило,
fk0>а не через Ctrl-C/Ctrl-V (потому, что потом если где-то ошибка например, то её теперь
fk0>по всем 100500 файлам выискивать и править? а если интерфейс поменять -- проще повеситься).

Скорее всего, одного генерика там бы за глаза хватило. Но это уже высший пилотаж.
Ад пуст, все бесы здесь.
Re[3]: самые элитные сортировщики гномов
От: sergii.p  
Дата: 19.10.21 10:35
Оценка:
Здравствуйте, fk0, Вы писали:

fk0> А если будет 10000 разных типов?


вот всегда оверинженеры задаются вопросом "а если будет ... ?". Сам страдаю от этого Встретил простенькую задачку, решил её сносно и пошёл дальше.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.