Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3 4 5      [все]
 ref и out параметры  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72736
Мой кодревьюер постоянно клюет мне моск, что использовать ref и out плохо, это слишком low level по его выражению. Я считаю, что не использовать какую-то возможность языка из идейных соображений (исключая goto, но это ограничение хорошо обосновано) - тупо.

Кто что думает по этому поводу?
15 май 19, 16:33    [21885526]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3350
Antonariy
Мой кодревьюер постоянно клюет мне моск, что использовать ref и out плохо, это слишком low level по его выражению. Я считаю, что не использовать какую-то возможность языка из идейных соображений (исключая goto, но это ограничение хорошо обосновано) - тупо.

Кто что думает по этому поводу?

бред, так ему и передай :)
он видимо не пользуется TryGetValue или TryParse, это же low level!
15 май 19, 16:37    [21885532]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72736
Еще говорит, сложно читать и мешает композиции. Насчет первого это его личная проблема, мне читается прекрасно, а насчет композиции мне непонятно, о чем речь.
15 май 19, 16:49    [21885555]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Antonariy,
Пример его варианта дайте.
15 май 19, 17:00    [21885578]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
Дело не в лоулевеле По сути метод с out/ref это метод с side effect, что не особо хорошо. Единственное, наверное, разумное применение, что я им вижу - это как раз упомянутый TryDoSomething(out blaBalBla). И то, можно заметить, что большинство таких стандартных методов всегда ходят парами - один с возможным ексепшеном, другой с "TryXXX".
15 май 19, 17:32    [21885621]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72736
Насчет композиции тоже бред, как выяснилось.
15 май 19, 17:48    [21885638]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72736
Petro123
Antonariy,
Пример его варианта дайте.
если нужно вернуть несколько значений, его вариант - наплодить классов.
кортежи пока не используем, потому что сидим на 4м фреймворке.
15 май 19, 17:54    [21885642]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72736
fkthat
По сути метод с out/ref это метод с side effect, что не особо хорошо.
Слишком абстрактно. Какие именно эффекты?
15 май 19, 17:55    [21885643]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Antonariy,
Вон, в java вообще нельзя два выходных параметра.
Но писать то неудобно с непривычки))
15 май 19, 17:58    [21885646]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Antonariy
Petro123
Antonariy,
Пример его варианта дайте.
если нужно вернуть несколько значений, его вариант - наплодить классов.
кортежи пока не используем, потому что сидим на 4м фреймворке.
значит он из java
15 май 19, 17:59    [21885647]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
Antonariy,

CA1045: Do not pass types by reference
15 май 19, 18:11    [21885653]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
Antonariy
если нужно вернуть несколько значений, его вариант - наплодить классов.
кортежи пока не используем, потому что сидим на 4м фреймворке.


В этом есть разумное зерно. Если метод возвращает сразу несколько значений, то, скорее всего эти значения достаточно тесно связаны и класс для них смысл имеет. Если они вообще никак не связаны, значит с методом что-то нездоровое - скорее всего нарушение single responsibility. Лично я кортежи использую обычто только как замену анонимным классам (чаще всего просто запись короче получается), например:

foreach((string en, string ru) color in new[] { ("red", "красный"), ("green", "зеленый"), ("blue", "синий") }) 
{
    Console.WriteLine($"{color.en} -> {color.ru}");
}


Из метода кортежи я бы возвращать не стал.
15 май 19, 18:27    [21885662]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Antonariy,
А var он использует?
В java позавчера только появилось)))
15 май 19, 18:49    [21885674]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20323
Antonariy
кортежи пока не используем, потому что сидим на 4м фреймворке.
4-й фреймворк никак не мешает использованию кортежей. Вот буквально недавно Випросу пример приводил
15 май 19, 20:10    [21885702]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20323
Shocker.Pro
Antonariy
кортежи пока не используем, потому что сидим на 4м фреймворке.
4-й фреймворк никак не мешает использованию кортежей. Вот буквально недавно Випросу пример приводил
21857815
15 май 19, 20:14    [21885707]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
Petro123
В java позавчера только появилось)))


А тебе что за печаль? Тебя же из жавы поперли, скоро из дотнета попрут - пойдешь на FoxPro 2.6 свои большие десктопы создавать
16 май 19, 07:07    [21885820]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
fkthat,
Таблеточек с утра выпей.
16 май 19, 07:16    [21885823]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20323
fkthat
А тебе что за печаль?
Petro123
Таблеточек с утра выпей.
За продолжение Петя-болла пострадают оба его участника. Я предупредил
16 май 19, 08:52    [21885865]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4673
fkthat
Дело не в лоулевеле По сути метод с out/ref это метод с side effect, что не особо хорошо. Единственное, наверное, разумное применение, что я им вижу - это как раз упомянутый TryDoSomething(out blaBalBla). И то, можно заметить, что большинство таких стандартных методов всегда ходят парами - один с возможным ексепшеном, другой с "TryXXX".

А как же Deconstruct?
А как же ref struct, readonly struct, readonly ref struct?
Да и по in кодревьюер походу еще не чухает.
16 май 19, 09:34    [21885899]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Antonariy
Petro123
Antonariy,
Пример его варианта дайте.
если нужно вернуть несколько значений, его вариант - наплодить классов.
кортежи пока не используем, потому что сидим на 4м фреймворке.
объективно, у него нет оснований. Так что выпей с ним пиво. В шарпе еще много нового будет.
16 май 19, 09:40    [21885909]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 2665
fkthat
Petro123
В java позавчера только появилось)))


А тебе что за печаль? Тебя же из жавы поперли, скоро из дотнета попрут - пойдешь на FoxPro 2.6 свои большие десктопы создавать


к слову, попробуй сейчас найди мастера, чтобы на фоксе сделал что-то ;-)
16 май 19, 09:47    [21885918]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 2665
Antonariy
Мой кодревьюер постоянно клюет мне моск, что использовать ref и out плохо, это слишком low level по его выражению. Я считаю, что не использовать какую-то возможность языка из идейных соображений (исключая goto, но это ограничение хорошо обосновано) - тупо.

Кто что думает по этому поводу?


goto бояться - в лес не ходить! это лучшее, что есть в разных языках
16 май 19, 09:50    [21885923]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Ролг Хупин,
Увы. У нас на работе java, шарп и c++
16 май 19, 09:50    [21885924]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 2665
Antonariy
Еще говорит, сложно читать и мешает композиции. Насчет первого это его личная проблема, мне читается прекрасно, а насчет композиции мне непонятно, о чем речь.


он, видимо, из разжалованных художников
16 май 19, 09:51    [21885925]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Ролг Хупин
это лучшее,
перебор))
16 май 19, 09:51    [21885926]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4673
Ролг Хупин
goto бояться - в лес не ходить! это лучшее, что есть в разных языках

Если использовать кодогенерацию, то goto самый то.
16 май 19, 09:53    [21885930]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
ЕвгенийВ
кодогенерацию
тоже пребор. Но ставлю имхо)
16 май 19, 10:02    [21885939]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72736
Shocker.Pro
Antonariy
кортежи пока не используем, потому что сидим на 4м фреймворке.
4-й фреймворк никак не мешает использованию кортежей. Вот буквально недавно Випросу пример приводил
Использовать класс Tuple можно, но синтаксические кортежи не работают, они требуют поддержки какими-то другими классами, которых в 4м нет. Можно использовать какое-то дополнение, но не хочется, в обозримом будущем переедем на фреймворк поновее.
16 май 19, 10:59    [21886009]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72736
автор
сидим на 4м фреймворке.
к тому же на client profile
16 май 19, 11:01    [21886016]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4673
Antonariy,
нужно только выбрать соответствующую версию языка

К сообщению приложен файл. Размер - 10Kb
16 май 19, 11:58    [21886075]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20323
Antonariy
Использовать класс Tuple можно, но синтаксические кортежи не работают, они требуют поддержки какими-то другими классами, которых в 4м нет.
Этот класс ValueTuple - его нет и в других фреймворках, не только в 4-м. При этом он прекрасно совместим и ставится из нугета, причем практически автоматом, как только начинаешь использовать именованные кортежи
Antonariy
но синтаксические кортежи не работают
я ж даже скриншот привел, что работают
Antonariy
к тому же на client profile
да пофиг. Этот, как я сказал, отдельный класс и синтаксис языка. К фреймворку не имеет отношения.
16 май 19, 16:59    [21886470]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
Shocker.Pro,

В общем-то, туплы (которые с красивым синтаксисом) появились в C# 7, а его в старом фреймворке может и не быть (он, емнип, шел с минимум 4.6). Другое дело, что можно спокойно поставить новый фреймворк с ним, а собирать им для старого фреймворка (поставить в свойствах проекта Target Framework). Есть правда с этим засада при работе в команде - у кого-нибудь некрофила может проект с вашим кодом не собраться.
16 май 19, 18:09    [21886551]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
Shocker.Pro,

Я имею в виду, не класс Tuple<T1, T2> и подобные, а поддержку конструкций типа

(string firstName, string lastName) person = ("Joe", "Doe");


(она на самом деле именно в Tuple<string, string> компилятором и преобразуется)
16 май 19, 18:15    [21886552]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20323
fkthat
В общем-то, туплы (которые с красивым синтаксисом) появились в C# 7, а его в старом фреймворке может и не быть....Я имею в виду, не класс Tuple<T1, T2> и подобные, а поддержку конструкций типа
мля, я же внятно сказал ValueTuple. И ссылку дал: 21857815
16 май 19, 18:39    [21886564]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20323
fkthat
(она на самом деле именно в Tuple<string, string> компилятором и преобразуется)
нет
16 май 19, 18:39    [21886565]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
Shocker.Pro
fkthat
В общем-то, туплы (которые с красивым синтаксисом) появились в C# 7, а его в старом фреймворке может и не быть....Я имею в виду, не класс Tuple<T1, T2> и подобные, а поддержку конструкций типа
мля, я же внятно сказал ValueTuple. И ссылку дал: 21857815


Все верно. У тебя таргетфреймворк 4, а компилятор стоит уже 7-й (это в настройках билда "Advanced" можно посмотреть или изменить). А у ТС может просто компилятора достаточно нового не быть. Мы сейчас точно так же стали, например, кое-что уже под коре 2 собирать на C# 8.
16 май 19, 18:43    [21886566]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20323
Shocker.Pro
fkthat
(она на самом деле именно в Tuple<string, string> компилятором и преобразуется)
нет
Очень важное отличие, на котором ты проколешься, раз думаешь, что именованные кортежи преобразуются в Tuple - это то, что именованный кортеж является структурой, а не классом, как Tuple.
16 май 19, 18:44    [21886569]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20323
fkthat
Все верно. У тебя таргетфреймворк 4, а компилятор стоит уже 7-й (это в настройках билда "Advanced" можно посмотреть или изменить). А у ТС может просто компилятора достаточно нового не быть. Мы сейчас точно так же стали, например, кое-что уже под коре 2 собирать на C# 8.
Я читаю то, что было написано и не более:
Antonariy
кортежи пока не используем, потому что сидим на 4м фреймворке.
16 май 19, 18:46    [21886571]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
Shocker.Pro,

Ну я ими почти не пользуюсь, т.ч. таких ньюансов не особо знаю. Но один черт, оно преобразуется в чисто библиотечный тип данных, который, как ты уже упоминал ставится под любой четвертый фреймворк пакетом. Просто с более старым компилятором придется этот тип данных использовать напрямую, а с новым можно более удобным синтаксисом писать. Вот попробуй в настройках проекта переключится на C# 6 и оно уже не соберется.
16 май 19, 18:50    [21886574]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20323
fkthat
Просто с более старым компилятором придется этот тип данных использовать напрямую, а с новым можно более удобным синтаксисом писать. Вот попробуй в настройках проекта переключится на C# 6 и оно уже не соберется.
это ежу понятно, но речь-то не об этом ))) возможно люди ограничивают себя просто по незнанию
16 май 19, 19:58    [21886615]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
hVostt
Member

Откуда:
Сообщений: 15397
Antonariy
Мой кодревьюер постоянно клюет мне моск, что использовать ref и out плохо, это слишком low level по его выражению. Я считаю, что не использовать какую-то возможность языка из идейных соображений (исключая goto, но это ограничение хорошо обосновано) - тупо.

Кто что думает по этому поводу?


Человеку больше заняться нечем видимо. Обоснование по типу "потому что зелёное", не нужно ему в кодревью.
19 май 19, 14:16    [21888180]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3663
Antonariy
Мой кодревьюер постоянно клюет мне моск, что использовать ref и out плохо, это слишком low level по его выражению. Я считаю, что не использовать какую-то возможность языка из идейных соображений (исключая goto, но это ограничение хорошо обосновано) - тупо.

Кто что думает по этому поводу?

А можно увидеть ваш метод, в котором используются out и ref параметры?
19 май 19, 18:27    [21888314]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Arm79,
Выше уже просил. Конкретику не показывают.
19 май 19, 19:42    [21888340]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
hVostt
Member

Откуда:
Сообщений: 15397
Antonariy,

Вот если бы код твой ревьювер сказал бы, например, что out/ref нельзя использовать в асинхронных методах и при необходимости переделывать их на асинк будет сложно рефакторить, вот это был бы разумный довод.

Опять же, ref действительно использовался в основном для поддержки работы с низкоуровневым АПИ, COM. Но это не касается out, который действительно очень полезен особенно вкупе с фичами C# 7, когда переменную можно объявить прям в out выражении.
19 май 19, 21:30    [21888394]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
hVostt
Вот если бы код твой ревьювер сказал бы, например, что out/ref нельзя использовать в асинхронных методах


А их и так нельзя использовать. Компилятор не даст.
19 май 19, 23:49    [21888439]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26479
fkthat
hVostt
Вот если бы код твой ревьювер сказал бы, например, что out/ref нельзя использовать в асинхронных методах


А их и так нельзя использовать. Компилятор не даст.
Ты вырвал фразу из контекста.
hVostt на это и намекает во второй части предложения.
20 май 19, 10:03    [21888584]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
hVostt
Но это не касается out, который действительно очень полезен особенно вкупе с фичами C# 7, когда переменную можно объявить прям в out выражении.


Мне все-таки как-то сложно придумать ему какую-то полезность, кроме паттерна "bool TryXXXX(out foo)" - кстати, это как раз и есть случай использования out-ов, на который code analysis не ругается.
20 май 19, 10:45    [21888622]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72736
Arm79
Antonariy
Мой кодревьюер постоянно клюет мне моск, что использовать ref и out плохо, это слишком low level по его выражению. Я считаю, что не использовать какую-то возможность языка из идейных соображений (исключая goto, но это ограничение хорошо обосновано) - тупо.

Кто что думает по этому поводу?

А можно увидеть ваш метод, в котором используются out и ref параметры?
А какая разница? По смыслу - TryParse. Например, метод открытия файла, возвращающий успех/неуспех и текст с путем к файлу или текст ошибки (в зависимости от успеха).
20 май 19, 20:09    [21889190]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72736
Ну или несколько разнородных объектов преобразовать в несколько объектов других родов.
20 май 19, 20:13    [21889194]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3663
Antonariy
метод открытия файла, возвращающий успех/неуспех и текст с путем к файлу или текст ошибки (в зависимости от успеха).

А почему не предусмотрели такой механизм в платформе? )))) именно для файлов возможно и не нужно так
20 май 19, 20:28    [21889204]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3663
Antonariy
Ну или несколько разнородных объектов преобразовать в несколько объектов других родов.

Это еще хуже, это имхо чистый exception
20 май 19, 20:28    [21889205]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Arm79,
Обязательно файл что ли?
По факту это требуется возврат два, три значения сразу. Без компоновки в класс.
Почему нет?
Ну а ref конвейерная обработка.
Я за свободу).
20 май 19, 20:42    [21889213]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
Antonariy
Например, метод открытия файла, возвращающий успех/неуспех и текст с путем к файлу или текст ошибки (в зависимости от успеха).


Звучит, как метод, который в зависимости от возвращаемого bool возвращает температуру на южном полюсе или цену на котлеты в соседнем бургеркинге.
20 май 19, 22:03    [21889250]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
stenford
Member

Откуда: урал
Сообщений: 2749
Antonariy
Мой кодревьюер постоянно клюет мне моск, что использовать ref и out плохо, это слишком low level по его выражению. Я считаю, что не использовать какую-то возможность языка из идейных соображений (исключая goto, но это ограничение хорошо обосновано) - тупо.

если у тебя постоянно используется ref/out/Tuple в коде - то точно что-то не то в консерватории, скорее всего очень непродуманная структура кода и классов, методы делающие и возвращающие несвязанные вещи. Такой код невозможно нормально читать и сопровождать. Ревьювер должен не на сами конструкции указывать, а на более фундаментальные проблемы кода, приведшие к их использованию
21 май 19, 03:39    [21889324]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
stenford
если у тебя постоянно
да. Ключевое слово постоянно.
Так же как cons, global и... размер метода в строках. Всему есть мера).
21 май 19, 07:28    [21889354]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3663
Petro123,

Нет, не обязательно )) Я ж не говорю, что плохо. Поэтому предложил сам метод показать, а не "по аналогии", "что-то похожее", так как аналогии могут быть и неверны

Ничего плохого в паттерне Try* нет, но справедливости ради следует отметить, что в в .net его применяют нечасто.

В случае с файлом вполне можно применять, если, например, файл не ваш, а пользуетесь чьим то другим. И не знаете, снята или нет монопольная блокировка. Но и это не 100%, так как монопольно занятый файл приводит при попытке доступа к exception. Иногда есть смысл глушить исключение, а иногда нет.

Без понимания контекста задачи нельзя однозначно сказать, хорошо это или плохо.
21 май 19, 08:01    [21889365]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Arm79,
Еще пример, рекурсия. Очень удобен сабж в рекурсии.
Еще пример, пересечение геометрии
Type Intersect(out pnt1, out pn2...
И т.д.
21 май 19, 08:34    [21889384]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Arm79
Без понимания контекста задачи нельзя однозначно сказать, хорошо это или плохо.
еще бы. Программирование это искусство а не ремесло (с)))))
21 май 19, 08:35    [21889385]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4673
Arm79

Ничего плохого в паттерне Try* нет, но справедливости ради следует отметить, что в в .net его применяют нечасто.


Вообще он появился когда C# был беден на конструкции.
В других языках применяется следующие. в GO что то типа
     public static (bool success, bool res) Parse(string str)
        {                
            if (string.Compare("true", str, true) == 0)
                return (true, true);
            return (false, false);
        }

В f# есть размеченные объединения, которые в итоге разворачиваются во что то подобное.
      public class BaseRes { }
        public class None : BaseRes { }
        public class Some<T> : BaseRes
        {
            public T Value { get; private set; }
            public Some(T t)
            {
                Value = t;
            }
        }

        public static BaseRes ParseBool(string str)
        {
            if (string.Compare("true", str, true) == 0)
                return new Some<bool>(true);
            return new None();
        }
21 май 19, 10:11    [21889456]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
ЕвгенийВ
Вообще он появился когда C# был беден на конструкции.
странная фраза.
Ref, out это преимущество шарп.
21 май 19, 10:26    [21889472]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4673
Petro123
Ref, out это преимущество шарп.

in еще может быть
ref и out скорее некий компромис, необходимый для взаимодействия с неупровляемым кодом.
21 май 19, 11:20    [21889531]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3663
ЕвгенийВ,

Насколько я помню, как раз в GO применяют такую конструкцию из-за проблем с exception - точнее, из-за другой концепции обработки exception

Так что говорить о "бедности" языковых конструкций C# некорректно
21 май 19, 11:44    [21889554]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
ЕвгенийВ,
Юз кейс я написал. Неуправляемый код у меня особенность чисто на деструктор.
Да и зачем его неуправляемым делать).
Поэтому передать по ссылке/указателю и выхолные бывает использую.
Всё испрльзую кроме GOTO))))
Его только в батниках.
Имхо
21 май 19, 11:52    [21889564]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4673
Arm79
Так что говорить о "бедности" языковых конструкций C# некорректно

Я к тому, что шарп в последнее время обогатился конструкциями и так называемый паттерн TryXXXX пока в топку.
21 май 19, 12:08    [21889593]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4673
Petro123,
Под неуправляемым кодом я имел ввиду именно неуправляемый, как ты это вызовешь без out?
21 май 19, 12:10    [21889597]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
ЕвгенийВ
Petro123,
Под неуправляемым кодом я имел ввиду именно неуправляемый, как ты это вызовешь без out?
а я это называл когда то в дельфи win api32).
OK

ЕвгенийВ
паттерн TryXXXX

А чем давить исключения в цикле?
21 май 19, 12:38    [21889632]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
ЕвгенийВ
шарп в последнее время
лет 15 или лет 5 это последнее врнмя?
21 май 19, 12:39    [21889634]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4673
Petro123
ЕвгенийВ
Petro123,
Под неуправляемым кодом я имел ввиду именно неуправляемый, как ты это вызовешь без out?
а я это называл когда то в дельфи win api32).
OK

Конкретно это не win api.
Petro123
ЕвгенийВ
паттерн TryXXXX

А чем давить исключения в цикле?

Зачем их давить? Вообще исключения не самая легкая штука, если часто возникают случаи например не корректности данных, то их нужно валидировать другими способами, не доводя до бросания исключений.
21 май 19, 14:16    [21889755]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
hVostt
Member

Откуда:
Сообщений: 15397
fkthat
Мне все-таки как-то сложно придумать ему какую-то полезность, кроме паттерна "bool TryXXXX(out foo)" - кстати, это как раз и есть случай использования out-ов, на который code analysis не ругается.


Полезность великая. Достать значение из словаря или подобной структуре одним выражением, распарсить строку, любая попытка чего-либо.

Иначе, придётся городить что-то типа возврата OperationResult с Payload, что не так уж и плохо, так как функционально и работает с async/await.
21 май 19, 14:36    [21889775]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
ЕвгенийВ
Зачем их давить? Вообще исключения не самая легкая штука, если часто возникают случаи например не корректности данных, то их нужно валидировать другими способами, не доводя до бросания исключений.
ты как будто не читал что я пишу.
Я давлю именно в юз кейсе ЦИКЛА.
Именно шаблоном tryXXX
Знаешь ДРУГИЕ способы - рассказывай.
21 май 19, 14:52    [21889789]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
hVostt
Полезность великая. Достать значение из словаря или подобной структуре одним выражением, распарсить строку, любая попытка чего-либо.

Ну так это и есть шаблон bool TryXXX(out ...), про который я писал.

hVostt
Иначе, придётся городить что-то типа возврата OperationResult с Payload, что не так уж и плохо, так как функционально и работает с async/await.

Тем более, что для таких случаев можно общий дженерик завести.
21 май 19, 16:44    [21889896]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
Как уже писали - неплохо было бы увидеть пример отбракованного кода. Сильно подозреваю, что там будет как почти всегда: "тупой тимлид гнобит юное дарование".
21 май 19, 16:47    [21889900]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
hVostt
Member

Откуда:
Сообщений: 15397
fkthat
Как уже писали - неплохо было бы увидеть пример отбракованного кода. Сильно подозреваю, что там будет как почти всегда: "тупой тимлид гнобит юное дарование".


Отсутствует адекватное обоснование, при чём тут "гнобление"?
Вся суть ревью это не только контроль качество кода, но и шаринг знаний.
21 май 19, 16:52    [21889907]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
hVostt
Отсутствует адекватное обоснование, при чём тут "гнобление"?
Вся суть ревью это не только контроль качество кода, но и шаринг знаний.

Ну так в исходном сообщение явно была жалоба на тяжелую жизнь.
21 май 19, 16:55    [21889914]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
hVostt
Member

Откуда:
Сообщений: 15397
fkthat
Ну так в исходном сообщение явно была жалоба на тяжелую жизнь.


Не думаю, что это является предметом обсуждения :)
По крайне мере до тех пор, пока не станет ясно, что ТС не прав
21 май 19, 17:15    [21889932]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72736
Никакой код с реф/аут отбракован не был, его утвердил тимлид.
Сабж не любит напарник, ревьюят оба.
Напарник внятно объяснить свою нелюбовь не смог, поэтому я попросил помощь зала, поскольку в голову никогда не приходило страдать такими вопросами.
21 май 19, 22:44    [21890099]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72736
stenford
если у тебя постоянно используется ref/out/Tuple в коде - то точно что-то не то в консерватории, скорее всего очень непродуманная структура кода и классов, методы делающие и возвращающие несвязанные вещи.
В консерватории очень много чего не так. Например, провайдер данных может зависеть от потребителя.)
Не я эту консерваторию запиливал.

И "постоянство" тут относительное. Я использую сабж редко, но каждый раз, как использую, получаю замечание и требование переписать. Иногда переписываю, иногда отстаиваю ref/out, если вижу, что альтернативные варианты чреваты кучей декоративного говнокода, который даже не будет повторно использован.
stenford
Такой код невозможно нормально читать и сопровождать.
Некоторые куски я переписываю декларативно на linq, даже не пытаясь разобраться, как исходное говно работает.
21 май 19, 23:01    [21890108]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
ViPRos
Member

Откуда:
Сообщений: 9536
Antonariy
... на linq, даже не пытаясь разобраться, как исходное говно работает.

лучше чем linq - стопудово
22 май 19, 00:19    [21890139]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
ViPRos
лучше чем linq - стопудово

О, вот и некрофилия подтянулась. Дженерики - порождение диавола. Самому не смешно, в 2019 году-то?
22 май 19, 00:40    [21890148]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
ViPRos
Member

Откуда:
Сообщений: 9536
fkthat
ViPRos
лучше чем linq - стопудово

О, вот и некрофилия подтянулась. Дженерики - порождение диавола. Самому не смешно, в 2019 году-то?

когда пишешь всякую фигню можно и дженерики
приходи лет через 20
22 май 19, 01:10    [21890154]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
ViPRos
приходи лет через 20

Послушать, как ты будешь тут спрашивать про миграцию с фокспро 2.6 на 6.0?
22 май 19, 01:28    [21890158]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72736
ViPRos
Antonariy
... на linq, даже не пытаясь разобраться, как исходное говно работает.

лучше чем linq - стопудово
"лучше" - характеристика качественная, ничего не говорящая о предмете конкретно.

решения с linq обычно работают медленнее, но они втрое-вчетверо меньше по объему и во столько же более читаемее. в том слое, где практикуются такие переписывания, это приемлемо, прозрачность и безглючность кода важнее производительности.
22 май 19, 10:27    [21890349]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
Antonariy
решения с linq обычно работают медленнее

В общем-то, только из-за доп. расходов на компиляцию лямбд (я и тут даже не уверен, м.б. в случае LINQ to Objects это уже компилятор заранее делает - надо будет декомпилятором как-нибудь посмотреть) - других причин я придумать не могу - внутри будет такой же foreach.
22 май 19, 10:42    [21890378]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72736
fkthat
Antonariy
решения с linq обычно работают медленнее

В общем-то, только из-за доп. расходов на компиляцию лямбд (я и тут даже не уверен, м.б. в случае LINQ to Objects это уже компилятор заранее делает - надо будет декомпилятором как-нибудь посмотреть) - других причин я придумать не могу - внутри будет такой же foreach.
Замедление не от самого linq, а от обвеса, с которым он работает.
22 май 19, 11:21    [21890447]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72736
А обвес работает с экселем) Поэтому шаг влево, шаг вправо от идеального по быстродействию способа - и эксель провисает.
22 май 19, 11:24    [21890451]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4673
fkthat
Antonariy
решения с linq обычно работают медленнее

В общем-то, только из-за доп. расходов на компиляцию лямбд (я и тут даже не уверен, м.б. в случае LINQ to Objects это уже компилятор заранее делает - надо будет декомпилятором как-нибудь посмотреть) - других причин я придумать не могу - внутри будет такой же foreach.

В случае LINQ to Objects компиляции лямб нет, если не делать AsQueryable
22 май 19, 11:29    [21890458]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4673
Antonariy
Замедление не от самого linq, а от обвеса, с которым он работает.

Есть замедление, ибо там сплошной вызов делегатов, хотя с другой стороны ленивые вычисления.
22 май 19, 11:30    [21890461]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
ЕвгенийВ
Antonariy
Замедление не от самого linq, а от обвеса, с которым он работает.

Есть замедление, ибо там сплошной вызов делегатов, хотя с другой стороны ленивые вычисления.

Делегат как-то принципиально по-другому вызывается по сравнению с обычным методом?
22 май 19, 11:49    [21890491]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
Antonariy
А обвес работает с экселем) Поэтому шаг влево, шаг вправо от идеального по быстродействию способа - и эксель провисает.


Если с екселем работаешь через COM, то там накладные расходы на его вызовы такие, что все остальное вообще никак влиять не должно.
22 май 19, 11:55    [21890499]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4673
fkthat
Делегат как-то принципиально по-другому вызывается по сравнению с обычным методом?

Ясен пень
// 		Action action = delegate
		// 		{
		// 			double num = Math.Cos(12.3);
		// 		};
		IL_0003: ldsfld class [mscorlib]System.Action ConsoleApp2.Program/'<>c'::'<>9__1_1'
		// (no C# code)
		IL_0008: dup
		IL_0009: brtrue.s IL_0022

		IL_000b: pop
		IL_000c: ldsfld class ConsoleApp2.Program/'<>c' ConsoleApp2.Program/'<>c'::'<>9'
		IL_0011: ldftn instance void ConsoleApp2.Program/'<>c'::'<Main>b__1_1'()
		IL_0017: newobj instance void [mscorlib]System.Action::.ctor(object, native int)
		IL_001c: dup
		IL_001d: stsfld class [mscorlib]System.Action ConsoleApp2.Program/'<>c'::'<>9__1_1'

		IL_0022: stloc.0
		// action();
		IL_0023: ldloc.0
		IL_0024: callvirt instance void [mscorlib]System.Action::Invoke()

Против
	// <Main>g__InnerFunction|1_0();
		IL_002a: call void ConsoleApp2.Program::'<Main>g__InnerFunction|1_0'()
22 май 19, 12:09    [21890518]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
ЕвгенийВ,

Инструкций больше, это-то и так понятно, но, именно принципиальной разницы, как, например "раннее связывание" и "позднее связывание" тут нет. И там и там метод прямо по указателю вызывается.
22 май 19, 12:43    [21890579]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72736
fkthat
Antonariy
А обвес работает с экселем) Поэтому шаг влево, шаг вправо от идеального по быстродействию способа - и эксель провисает.


Если с екселем работаешь через COM, то там накладные расходы на его вызовы такие, что все остальное вообще никак влиять не должно.
А от COM никуда не денешься, виндовый офис имеет его в своем фундаменте. Работаю через NET-обертки ExcelDna+NetOffice, так что добавь еще накладные расходы внутри них. Однако даже их сумма ничто по сравнению с производительностью самих вызываемых методов.

Например, удаление диапазона строк. Удаление одной строки и сотни строк по времени почти одинаково, но если удалять диапазон построчно, то время возрастает в разы, даже если поотключать экселю все обновления и события. Это самый очевидный кейс, и его я оптимизирую, если натыкаюсь на построчное удаление, а самый распространенный - атомарная операция присвоения массива диапазону, и тут местами приходится разоптимизировать. Метод, создающий массив, обычно имеет кучу параметров, определяющих его внешний вид и размер, данные для массива разнородные, полет мысли авторов, собирающих эти данные в кучу, неописуем. В результате имеем кучу нечитаемых методов, непригодных для повторного использования - грубо говоря, в новом методе массив формируется новым способом, и здесь правят бал Tuple<>. Приходится дробить атомарную операцию на осмысленные куски (которые возможно повторно использовать в других методах), выводя кусками и массив, и это основная причина проседания производительности. Но терпимая.
22 май 19, 14:12    [21890760]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72736
fkthat
ЕвгенийВ,

Инструкций больше, это-то и так понятно, но, именно принципиальной разницы, как, например "раннее связывание" и "позднее связывание" тут нет. И там и там метод прямо по указателю вызывается.
так-то ранее связывание отличается от позднего тем, что во втором как раз и есть больше инструкций, занимающимися тем, чем при раннем связывании занимается компилятор - определением адреса вызываемого метода)
22 май 19, 14:20    [21890777]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Antonariy,
У вас проблема вроде не в скорости была).
22 май 19, 15:29    [21890887]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3350
в Linq почти все вызовы больше O(n), так как последовательность IEnumerabl<T> не упорядочена, не имеет фиксированного размера, нет предоставляет прямой доступ по индексу к элементам последовательности, что делает невозможным применение более быстрых алгоритмов логарифмической сложности O(logn) и константного время доступа к элементам последовательности.
Время материализации постоянно O(c) для всех случаев, им можно пренебречь, ведь и для обычных массивов и для IEnumerable<T> данные в любом случае придется загрузить.
Массив в отличии от последовательности, это непрерывная область в памяти фиксированной длинны, то есть вероятность того, что весь массив или его часть окажется закэширован выше, чем в случае с последовательностью, ведь не факт, что за кулисами массив. И в момент обращения к первому элементу, 2 вообще еще существует.

Linq и последовательности, по очевидным причинам удобнее, лаконичнее, короче, нагляднее и выразительнее, чем работа с более низкоуровневыми типами. А концепция методов расширения позволяет расширить её и добавить сколько угодно новых методов.

За собой замечаю, что все больше отдаю предпочтение массивам T[], особенно если последовательность имеет фиксированный размер и важен доступ через индексатор.

Оптимизация нужна не всегда и не везде. Нет смысла городить сложные алгоритмы поиска в наборе из 100 записей, при реализации функционала если задача выполняется за разумное\требуемое время, нет смысла делать её быстрее.
22 май 19, 17:00    [21891009]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
Roman Mejtes,

В Linq многие методы оптимизированы за счет того, что они сначала смотрят, что на самом деле лежит под IEnumerable и для "знакомых" им коллекций вызывают соответствующие "быстрые" методы или свойства. Поясню на примере:
new [] {1, 2, 3, 4}.Count()

В этом случае Сount() распознает, что в него передали массив и не станет просто перебирать его элементы и подстчитывать, а сразу вернет свойство Length.
22 май 19, 17:37    [21891061]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
ЕвгенийВ
В случае LINQ to Objects компиляции лямб нет, если не делать AsQueryable

Да, посмотрел - там блямбда преобразуется в делегат уже самим компилятором.
22 май 19, 17:39    [21891066]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3350
fkthat
Roman Mejtes,

В Linq многие методы оптимизированы за счет того, что они сначала смотрят, что на самом деле лежит под IEnumerable и для "знакомых" им коллекций вызывают соответствующие "быстрые" методы или свойства. Поясню на примере:
new [] {1, 2, 3, 4}.Count()

В этом случае Сount() распознает, что в него передали массив и не станет просто перебирать его элементы и подстчитываеть, а сразу вернет свойство Length.

Ваш пример, это наилучший результат выполнения метода, подобный тому, если бы N было равно 0 или 1, размер коллекции мы бы получили немедленно, практически за константное время. Но при оптимизации рассматривают наихудший из возможных сценариев, а не наилучший. В худшем из сценариев, данный метод может занимать огромное количество времени.
22 май 19, 18:05    [21891097]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
Antonariy
так-то ранее связывание отличается от позднего тем, что во втором как раз и есть больше инструкций, занимающимися тем, чем при раннем связывании занимается компилятор - определением адреса вызываемого метода)

Ну так если рассуждать, то вообще ничего от ничего не отличается. MS Office отличается от SQL Server только количеством и порядком инструкций.
22 май 19, 18:06    [21891098]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4673
Roman Mejtes
Ваш пример, это наилучший результат выполнения метода, подобный тому, если бы N было равно 0 или 1, размер коллекции мы бы получили немедленно, практически за константное время. Но при оптимизации рассматривают наихудший из возможных сценариев, а не наилучший. В худшем из сценариев, данный метод может занимать огромное количество времени.

public static int Count<TSource>(this IEnumerable<TSource> source)
{
	if (source == null)
	{
		throw Error.ArgumentNull("source");
	}
	ICollection<TSource> collection = source as ICollection<TSource>;
	if (collection != null)
	{
		return collection.Count;
	}
	ICollection collection2 = source as ICollection;
	if (collection2 != null)
	{
		return collection2.Count;
	}
	int num = 0;
	using (IEnumerator<TSource> enumerator = source.GetEnumerator())
	{
		while (enumerator.MoveNext())
		{
			num = checked(num + 1);
		}
		return num;
	}
}
22 май 19, 18:18    [21891108]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
ViPRos
Member

Откуда:
Сообщений: 9536
fkthat
ViPRos
приходи лет через 20

Послушать, как ты будешь тут спрашивать про миграцию с фокспро 2.6 на 6.0?

пшел бы
22 май 19, 20:03    [21891203]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
hVostt
Member

Откуда:
Сообщений: 15397
Antonariy
stenford
если у тебя постоянно используется ref/out/Tuple в коде - то точно что-то не то в консерватории, скорее всего очень непродуманная структура кода и классов, методы делающие и возвращающие несвязанные вещи.
В консерватории очень много чего не так. Например, провайдер данных может зависеть от потребителя.)
Не я эту консерваторию запиливал.


Стоило бы спросить у стенфорда, например, в чём проблема ref/out/Tuple, но внятного ответа ты не дождёшься. Одно только ясно "что-то не то"

Ох уж эта религия..
22 май 19, 20:48    [21891240]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
hVostt,

По-моему он в своем сообщении вполне понятно написал.
22 май 19, 21:41    [21891281]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
hVostt
Member

Откуда:
Сообщений: 15397
fkthat
hVostt,

По-моему он в своем сообщении вполне понятно написал.


Ничего понятного тут нет и в помине. Ты испольуешь ref/out -- значит у тебя (скорее всего) "очень непродуманная структура". Рили?

Это прекрасно, я смотрю тут многим не нужно в ревью, настоятельно.
22 май 19, 23:44    [21891364]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4673
hVostt
в чём проблема ref/out/Tuple, но внятного ответа ты не дождёшься. Одно только ясно "что-то не то"


Проблема в слабости системы типов C#.
23 май 19, 09:29    [21891507]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
hVostt,

На этот случай должны быть утвержденные кодинг-стайл гайдлайнс, чтобы не тратить по полдня читая лекции про правильный дизайн каждому джуну. Подрастут, книжек умных почитают, и сами разберутся что к чему.
23 май 19, 09:40    [21891521]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4673
Roman Mejtes
в Linq почти все вызовы больше O(n),

Тут можно поспорить.
Посчитай O(?)
для
var dfg = new[] {21, 1, 2, 3, 4 }.AsParallel().
                Select(x => x * x);
23 май 19, 09:52    [21891531]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3350
ЕвгенийВ
Roman Mejtes
в Linq почти все вызовы больше O(n),

Тут можно поспорить.
Посчитай O(?)
для
var dfg = new[] {21, 1, 2, 3, 4 }.AsParallel().
                Select(x => x * x);

и? как параллелизм, в данном случае, влияет на алгоритм? каждый элемент массива будет возведен в квадрат, в 2, 10 или 1 потоке это происходит, не имеет значения.
23 май 19, 16:34    [21892264]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
hVostt
Member

Откуда:
Сообщений: 15397
fkthat
hVostt,

На этот случай должны быть утвержденные кодинг-стайл гайдлайнс, чтобы не тратить по полдня читая лекции про правильный дизайн каждому джуну. Подрастут, книжек умных почитают, и сами разберутся что к чему.


Как относится кодинг-стайл к out/ref?
23 май 19, 22:44    [21892540]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
hVostt,

ну, пускай, выкинем "style", назовем просто "coding guidelines", или "best practice" - один черт все, я думаю, поняли о чем я.
23 май 19, 23:05    [21892551]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4673
Roman Mejtes
ЕвгенийВ
пропущено...

Тут можно поспорить.
Посчитай O(?)
для
var dfg = new[] {21, 1, 2, 3, 4 }.AsParallel().
                Select(x => x * x);

и? как параллелизм, в данном случае, влияет на алгоритм? каждый элемент массива будет возведен в квадрат, в 2, 10 или 1 потоке это происходит, не имеет значения.

Как то так.

К сообщению приложен файл. Размер - 81Kb
23 май 19, 23:33    [21892567]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72736
Roman Mejtes
ЕвгенийВ
пропущено...

Тут можно поспорить.
Посчитай O(?)
для
var dfg = new[] {21, 1, 2, 3, 4 }.AsParallel().
                Select(x => x * x);

и? как параллелизм, в данном случае, влияет на алгоритм? каждый элемент массива будет возведен в квадрат, в 2, 10 или 1 потоке это происходит, не имеет значения.
как это не имеет? а выигрыш в производительности? либо у тебя в одном потоке все считается, либо в разных потоках разбрасывается кусками по ядрам и все куски считаются параллельно.
23 май 19, 23:35    [21892569]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
Antonariy,

Сложность алгоритма это формальное понятие и к практической производительности имеет условное отношение. Хоть стопиццот ядер поставь, но формальная сложность будет все равно O(N).
23 май 19, 23:44    [21892572]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4673
fkthat
Antonariy,

Сложность алгоритма это формальное понятие и к практической производительности имеет условное отношение. Хоть стопиццот ядер поставь, но формальная сложность будет все равно O(N).

Все зависит от алгоритма.
Быстрая сортировка легко распараллеливается, а вычисление чисел Фибоначчи нет. Этот факт при подсчете сложности нельзя не учитывать.
23 май 19, 23:49    [21892575]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
ЕвгенийВ,

Ну опять-таки - никак не связано. Распараллеливай, не распараллеливай, но кол-во действий будет то же самое, хоть и выполнятся они быстрее (если на нескольких ядрах), т.ч. O() то же самое. И, тупой "пузырек", например, будет намного быстрее чем qsort, если ими массив из нескольких чисел сортировать - к асимптотической сложности это отношения никакого не имеет. O(N) означает только что есть такие C и M, что T(N > M) / N всегда не больше C. Насколько большие или малые эти C и N определение ничего не говорит. Они, например, могут быть настолько большие, что на любых реальных данных O(N) может оказаться медленней чем хоть O(N!), я же говорю - это чисто формально-теоретическое понятие.
24 май 19, 00:23    [21892578]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4673
fkthat,
Вообще вычислительная сложность складывается из временной сложности и пространственной сложности.
Временная является функцией от количества обрабатываемых элементов и если мы можем распараллелить, поделить хотя бы на 2, уже очень круто.
Проще говоря у тебя сильно больше шансов дождаться результатов работы алгоритма, который будет работать 25 лет, чем у того, который будет работать 50 лет.
24 май 19, 09:49    [21892752]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3350
ЕвгенийВ,

последовательность Фибоначчи легко параллелизуется
с помощью перемножения матриц можно за log(n) найти значение числа N в последовательности, если у нас 4 потока, то находим 8 начальных значений, потом просто в 4 потока заполняем последовательность
24 май 19, 10:25    [21892810]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4673
Roman Mejtes
ЕвгенийВ,

последовательность Фибоначчи легко параллелизуется
с помощью перемножения матриц можно за log(n) найти значение числа N в последовательности, если у нас 4 потока, то находим 8 начальных значений, потом просто в 4 потока заполняем последовательность

А подробнее? Где почитать?
24 май 19, 10:47    [21892859]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
ЕвгенийВ
Проще говоря у тебя сильно больше шансов дождаться результатов работы алгоритма, который будет работать 25 лет, чем у того, который будет работать 50 лет.


var end = DateTime.Now.AddYears(50);
while (DateTime.Now < end)
{
    Thread.Sleep(int.MaxValue);
}
Console.WriteLine(42);


24 май 19, 10:50    [21892865]     Ответить | Цитировать Сообщить модератору
 Re: ref и out параметры  [new]
fkthat
Member

Откуда:
Сообщений: 1143
ЕвгенийВ
А подробнее? Где почитать?

Я тоже заинтересовался, бегло поискал - там суть в возведении в степень определенной матрицы 2х2 из нулей и единиц. Гуглом легко найти кучу ссылок.
24 май 19, 10:58    [21892887]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3 4 5      [все]
Все форумы / WinForms, .Net Framework Ответить