Минутка WTF-19: Catch me if you can
От: Sinix  
Дата: 28.02.17 05:42
Оценка: 10 (2) +1
Очевидное-невероятное заказывали
Автор: Sinix
Дата: 27.02.17
?
        static void Do(ImmutableArray<int> x)
        {
            if (x.Length == 0)
                return;

            // ...
        }

Всё норм, да? ; )

UPD Поскольку до главного WTF народ таки не добрался, подсказка:
        static void Do(ImmutableArray<int> x)
        {
            if (x.Length == 0)
                return;

            // ...
        }
        static void Do(ICollection<int> x)
        {
            if (x.Count == 0)
                return;

            // ...
        }


  совсем подсказка
См. на название топика
Отредактировано 28.02.2017 8:16 Sinix . Предыдущая версия . Еще …
Отредактировано 28.02.2017 5:43 Sinix . Предыдущая версия .
минутка wtf
Re: Минутка WTF-19: Catch me if you can
От: vasmann  
Дата: 28.02.17 06:11
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>Всё норм, да? ; )


Документация с наличием свойства IsEmpty намекает что не всё норм.
Не пробовал что делает код, но судя по теме похоже выбрасывает ексепшон.
Re[2]: Минутка WTF-19: Catch me if you can
От: Sinix  
Дата: 28.02.17 06:17
Оценка:
Здравствуйте, vasmann, Вы писали:

S>>Всё норм, да? ; )

V>Документация с наличием свойства IsEmpty намекает что не всё норм.
Наоборот же Документация (см Remarks) не заморачивается такими мелочами.


V>Не пробовал что делает код, но судя по теме похоже выбрасывает ексепшон.

Ну таки да, но тема до конца не раскрыта.
Re[3]: Минутка WTF-19: Catch me if you can
От: Venom  
Дата: 28.02.17 06:28
Оценка:
Здравствуйте, Sinix, Вы писали:

V>>Документация с наличием свойства IsEmpty намекает что не всё норм.

S>Наоборот же Документация (см Remarks) не заморачивается такими мелочами.

Но там ничего не написано про IsEmpty или Lenght.
Re: Минутка WTF-19: Catch me if you can
От: SergeyT. США http://sergeyteplyakov.blogspot.com/
Дата: 28.02.17 06:34
Оценка: 2 (1) +1
Здравствуйте, Sinix, Вы писали:

S>Всё норм, да? ; )


Да, это сильно. Хотя документация, точнее комментарии в сорцах, вполне доходчиво объясняет, что да как. Но что этот комментарий делает в коде и почему он не находится в секции remarks, я хз!

З.Ы. Это очередное доказательство того, что стоимость использования специализированных коллекций существенно выше, чем коллекций общего назначения. Правда есть небольшая проблема с тем, что не всегда понятно, что является специализированным, а что нет, и где тебя подстерегает такая засада

У меня в текущем проекте много структур. Правда много. Большинство из них неизменяемые, но бывают и исключения. Но все они содержат свойство IsValid, что позволяет отличить валидный экземпляр от невалидного. Да, можно сказать, что ImmutableArray.IsEmpty играет ту же самую роль, но, ИМХО, это не так. Для большинства разработчиков, и меня в том числе, foo.IsEmpty и foo.Length == 0 должны быть эквивалентными семантически, пусть и с разницей (потенциальной) с производительностью.
Re[3]: Минутка WTF-19: Catch me if you can
От: samius Япония http://sams-tricks.blogspot.com
Дата: 28.02.17 06:34
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, vasmann, Вы писали:


V>>Не пробовал что делает код, но судя по теме похоже выбрасывает ексепшон.

S>Ну таки да, но тема до конца не раскрыта.

new ImmutableArray<int>() что ли? Но это не засада, судя по тому что
internal void ThrowNullRefIfNotInitialized()
{
    int num = this.array.Length;
}

Т.е. они такое делают чуть ли не в каждом методе.
Re[4]: Минутка WTF-19: Catch me if you can
От: Sinix  
Дата: 28.02.17 06:35
Оценка:
Здравствуйте, Venom, Вы писали:

V>>>Документация с наличием свойства IsEmpty намекает что не всё норм.

S>>Наоборот же Документация (см Remarks) не заморачивается такими мелочами.

V>Но там ничего не написано про IsEmpty или Lenght.


Как это не написано?

ImmutableArray<T>.IsEmpty
Gets a value indicating whether this ImmutableArray<T> is empty.

...

ImmutableArray<T>.Length

Gets the number of elements in the array.


Соблюдая традиции
Автор: Sinix
Дата: 18.08.11
, ага.
Re[3]: Минутка WTF-19: Catch me if you can
От: vasmann  
Дата: 28.02.17 06:35
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, vasmann, Вы писали:


S>>>Всё норм, да? ; )

V>>Документация с наличием свойства IsEmpty намекает что не всё норм.
S>Наоборот же Документация (см Remarks) не заморачивается такими мелочами.

Не, я про то, что наличие свойства IsEmpty настораживает. Но пацаны да, решили не пояснять почему нужно это свойство а не обычное Length == 0
С этим типом не работал, потому самому интересно что с этим WTF.
Re[2]: Минутка WTF-19: Catch me if you can
От: samius Япония http://sams-tricks.blogspot.com
Дата: 28.02.17 06:36
Оценка: +1 :)
Здравствуйте, SergeyT., Вы писали:

ST>Для большинства разработчиков, и меня в том числе, foo.IsEmpty и foo.Length == 0 должны быть эквивалентными семантически, пусть и с разницей (потенциальной) с производительностью.

А они и эквивалентны. IsDefault скажет что array == null.
Re[2]: Минутка WTF-19: Catch me if you can
От: Sinix  
Дата: 28.02.17 06:40
Оценка:
Здравствуйте, SergeyT., Вы писали:

ST>Да, это сильно.

Это преуменьшение Я подробней распишу чуть пожже, как народ раскачается и нормально ответит.
Re[3]: Минутка WTF-19: Catch me if you can
От: SergeyT. США http://sergeyteplyakov.blogspot.com/
Дата: 28.02.17 06:40
Оценка: +1
Здравствуйте, samius, Вы писали:

ST>>Для большинства разработчиков, и меня в том числе, foo.IsEmpty и foo.Length == 0 должны быть эквивалентными семантически, пусть и с разницей (потенциальной) с производительностью.

S>А они и эквивалентны. IsDefault скажет что array == null.

Точно. предыдущий комментарий сбил меня с толку и я не проверил.

Но IsDefault, ИМХО, явно не передает всей прелести ситуации. Ведь по сути, общение с экземпляром, чей IsDefault возвращает true равносильно работе с нулевой ссылкой. Но вот имя как-то не располагает к такой аналогии.
Re[4]: Минутка WTF-19: Catch me if you can
От: Sinix  
Дата: 28.02.17 06:49
Оценка:
Здравствуйте, samius, Вы писали:

S>Т.е. они такое делают чуть ли не в каждом методе.

Оок, подсказка: что именно бросается при обращению к свойству .Length?
Re[5]: Минутка WTF-19: Catch me if you can
От: samius Япония http://sams-tricks.blogspot.com
Дата: 28.02.17 06:51
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, samius, Вы писали:


S>Оок, подсказка: что именно бросается при обращению к свойству .Length?

NullReferenceException
и?
Re[6]: Минутка WTF-19: Catch me if you can
От: Sinix  
Дата: 28.02.17 06:58
Оценка:
Здравствуйте, samius, Вы писали:

S>>Оок, подсказка: что именно бросается при обращению к свойству .Length?

S>NullReferenceException
S>и?

И смотрим на название топика. Как при таком раскладе корректно ловить ситуацию "кривой массив передали"?
Re[3]: Минутка WTF-19: Catch me if you can
От: vasmann  
Дата: 28.02.17 06:59
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, SergeyT., Вы писали:


ST>>Да, это сильно.

S>Это преуменьшение Я подробней распишу чуть пожже, как народ раскачается и нормально ответит.

Могу предположить что ноги растут из массива неизменяемых массивов.
IA — ImmutableArray
1. Поскольку если выделить IA<T>[] = new IA<T>[100]; Для них не вызовется конструктор и все поля будут нулами/нулями.
2. Из этого по идее следует логичное поведение new IA<T>() так же должен будет быть проинициализирован нулом.
3. Так же можно и просто описать переменную IA<T> someIa.
Соответственно внутреннее поле остается пустым до заполнения данными, плюс нету дерганья памяти для инициализации пустым массивом new T[0].

Такие вот мысли.
Re[4]: Минутка WTF-19: Catch me if you can
От: samius Япония http://sams-tricks.blogspot.com
Дата: 28.02.17 07:01
Оценка:
Здравствуйте, SergeyT., Вы писали:

ST>Но IsDefault, ИМХО, явно не передает всей прелести ситуации. Ведь по сути, общение с экземпляром, чей IsDefault возвращает true равносильно работе с нулевой ссылкой. Но вот имя как-то не располагает к такой аналогии.

Не передает, но намекает на default(ImmutableArray<T>). Какое бы решение выглядело лучше?
В моем проекте есть тоже структура-обертка над массивом, там я сделал IsNull. Так чуть ближе к народу, но намного ли?
Re[7]: Минутка WTF-19: Catch me if you can
От: vasmann  
Дата: 28.02.17 07:03
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, samius, Вы писали:


S>>>Оок, подсказка: что именно бросается при обращению к свойству .Length?

S>>NullReferenceException
S>>и?

S>Как при таком раскладе корректно ловить ситуацию "кривой массив передали"?


.IsDefault что надо признать адски не очевидно и это надо бы красными буквами жирными выделять в документации
Re[7]: Минутка WTF-19: Catch me if you can
От: samius Япония http://sams-tricks.blogspot.com
Дата: 28.02.17 07:12
Оценка: +2
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, samius, Вы писали:



S>И смотрим на название топика. Как при таком раскладе корректно ловить ситуацию "кривой массив передали"?

Я думал что названия топика для того что бы гугломэйл группировал сообщения

Обычно я хожу в документацию, но там пока все плохо, значит в ILSpy. А там пока пишут, что полетит NullReferenceException в случае default. Изменится ли это — фиг знает.
Я согласен, что как-то не очень. Но как сделать лучше — с разбегу не скажу.
Re[5]: Минутка WTF-19: Catch me if you can
От: Venom  
Дата: 28.02.17 08:41
Оценка:
Здравствуйте, Sinix, Вы писали:

S>>>Наоборот же Документация (см Remarks) не заморачивается такими мелочами.

V>>Но там ничего не написано про IsEmpty или Lenght.
S>Как это не написано?
Ой, что-то я протупил. Просто ты указал секцию Remarks (см выделение в процитированном) и я посмотрел только там.
Re: Минутка WTF-19: Catch me if you can
От: IT Россия linq2db.com
Дата: 01.03.17 00:25
Оценка:
Здравствуйте, Sinix, Вы писали:

S>
  совсем подсказка
S>См. на название топика


Прделагаю под двумя катами запрятать совсем севсем подсказку для совсем совсем ленивых.
Если нам не помогут, то мы тоже никого не пощадим.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.