Re[5]: Default-параметры в ф-циях на C#
От: Lloyd Россия  
Дата: 26.12.03 13:57
Оценка: +1
Здравствуйте, Ransom Stark, Вы писали:

FL>>Параметр по умолчанию очень удобен, когда добавляется параметр функции, и не хочется переписывать старый код.

RS>Т.е., изменить сигнатуру функции и от души посмеяться над теми, у кого функция перестанет вызываться?
RS>IMHO, пример создания потенциальных проблем на пустом месте — и всё из за трёх строчек кода?
RS>Другое дело, если в функции 40 параметров, и каждый не обязателен. Как такое писать на шарпе — не представляю. Но надеюсь, никогда и не узнаю.

Создать класс с 40 полями и передавать в фунцию его экземпляр. В конструкторе полям приписываются значения по умоланию.
... << RSDN@Home 1.1.2 beta 1 >>
Re[6]: Default-параметры в ф-циях на C#
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 26.12.03 14:07
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Создать класс с 40 полями и передавать в фунцию его экземпляр. В конструкторе полям приписываются значения по умоланию.

Ну зачем же сразу класс, можно ссылку на структуру. Обычный подход с дефаултным конструктором
Массив параметров вам тоже поможет
и солнце б утром не вставало, когда бы не было меня
Re[7]: Default-параметры в ф-циях на C#
От: Ransom Stark Россия  
Дата: 26.12.03 14:18
Оценка:
L>>Создать класс с 40 полями и передавать в фунцию его экземпляр. В конструкторе полям приписываются значения по умоланию.
S> Ну зачем же сразу класс, можно ссылку на структуру. Обычный подход с дефаултным конструктором
Если обобщить и вернуться к теме — IMHO, параметры по умолчанию — не лучший выбор с точки зрения стиля и дизайна
Re[5]: Default-параметры в ф-циях на C#
От: Oxy  
Дата: 26.12.03 14:22
Оценка:
Хорошо, вот пример из жизни.
Надо сделать такую ф-ию. На С я бы сделал так
bool FillDropDownList(DropDownList ddl, string alias, string sql, string AllText = "")
{
  DataTable dt = SqlAccess.GetDataTable(alias, sql);
  if (AllText != "") {
    DataRow dr = dt.NewRow();
    dr[0] = 0;
    dr[1] = AllText;
    dt.Rows.InsertAt(dr, 0);
  }
  ddl.DataSource = dt.DefaultView;
  ddl.DataValueField = dt.Columns[0].ColumnName;
  ddl.DataTextField = dt.Columns[1].ColumnName;
  ddl.DataBind();
  ddl.EnableViewState = true;
  ddl.Visible = true;
  dt = null;
  return true;
}

Все понятно. Задал параметр, значит будет добавляться AllText, не задал не будет.
Возникает вопрос, а как сделать аналогичную конструкцию на С#?
1. Сделать две перегруженные копии ф-ции. В одной будет добавление All а в другой — нет. Это имхо неудобно если потребуется изменить код ф-ции. Прийдется менят в двух местах.
2. Создать 3 ф-ции
Две из них это интерфейсы к третьей, которая собственно и будет делать всю работу.
3. Использовать все же ф-цию с 2 параметрами и всегда их явно указывать. Это, имхо, лучший вариант, но стоило ли тогда огород городить...

Это я к тому, что некоторые говорят будто перегрузка всегда лучше и логичнее чем дефолтовые параметры. Не лучшее. И лучше бы они оставили в C# параметры по умолчанию.
Re[7]: Default-параметры в ф-циях на C#
От: Lloyd Россия  
Дата: 26.12.03 14:22
Оценка:
Здравствуйте, Serginio1, Вы писали:

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


L>>Создать класс с 40 полями и передавать в фунцию его экземпляр. В конструкторе полям приписываются значения по умоланию.

S> Ну зачем же сразу класс, можно ссылку на структуру. Обычный подход с дефаултным конструктором

Класс -- потому что это стандартый подход (патерн) для данной проблемы. Кажется так и называется Parameter.

Дефаултный конструктор у структуры? Нука-нука. Расскажи.

Да и зачем ссылку? Ты собрался значения через нее что-ли возвращать?

S> Массив параметров вам тоже поможет


Угу. Нам типа плевать на типобезопасность и все такое. Как что-ли?
... << RSDN@Home 1.1.2 beta 1 >>
Re[8]: Default-параметры в ф-циях на C#
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 26.12.03 14:36
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Дефаултный конструктор у структуры? Нука-нука. Расскажи.


Не расскажу. Хоть и нельзя но можно. Просто под конструктором может выступаь любая статическая функция. С Новым Годом!!! И больше положительных Эмоций!!!
L>Да и зачем ссылку? Ты собрался значения через нее что-ли возвращать?

Во Во сишники. Как Win Api так ссылки на структуры нормальное явление. Классы ни ни.
Только стек и никаких куч.
S>> Массив параметров вам тоже поможет

L>Угу. Нам типа плевать на типобезопасность и все такое. Как что-ли?

Чья проблема, тот так и реализует.
Еще раз С Нвым Годом!!!!
и солнце б утром не вставало, когда бы не было меня
Re[8]: Default-параметры в ф-циях на C#
От: Oxy  
Дата: 26.12.03 14:47
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Угу. Нам типа плевать на типобезопасность и все такое. Как что-ли?


А мне лично плевать. Меня страшно бесит когда компиляция останавливается при попытке приравнить тип long к типу int.
Re[6]: Default-параметры в ф-циях на C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.12.03 14:51
Оценка: +1
Здравствуйте, Oxy, Вы писали:

Oxy>Возникает вопрос, а как сделать аналогичную конструкцию на С#?


bool FillDropDownList(DropDownList ddl, string alias, string sql)
{
    FillDropDownList(ddl, alias, sql, "");
}

bool FillDropDownList(DropDownList ddl, string alias, string sql, string AllText)
{
  DataTable dt = SqlAccess.GetDataTable(alias, sql);
  if (AllText != "") {
    DataRow dr = dt.NewRow();
    dr[0] = 0;
    dr[1] = AllText;
    dt.Rows.InsertAt(dr, 0);
  }
  ddl.DataSource = dt.DefaultView;
  ddl.DataValueField = dt.Columns[0].ColumnName;
  ddl.DataTextField = dt.Columns[1].ColumnName;
  ddl.DataBind();
  ddl.EnableViewState = true;
  ddl.Visible = true;
  dt = null;
  return true;
}
... << RSDN@Home 1.1.2 beta 2 (mobile station) >>
AVK Blog
Re[6]: Default-параметры в ф-циях на C#
От: Ransom Stark Россия  
Дата: 26.12.03 14:54
Оценка: +1
Здравствуйте, Oxy, Вы писали:

Oxy>Надо сделать такую ф-ию. На С я бы сделал так

Oxy>
Oxy>bool FillDropDownList(DropDownList ddl, string alias, string sql, string AllText = "")

так проблема-то в чём? Блин, одна строчка:
bool FillDropDownList(DropDownList ddl, string alias, string sql, string AllText){...}
bool FillDropDownList(DropDownList ddl, string alias, string sql){return FillDropDownList(ddl, alias, sql, "");}

С точки зрения дальнейшей работы надежнее и понятнее. "Либо так, либо так", вместо "так, но если очень хочется. то эдак"
Re[9]: Default-параметры в ф-циях на C#
От: Lloyd Россия  
Дата: 26.12.03 15:25
Оценка:
Здравствуйте, Serginio1, Вы писали:

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


L>>Дефаултный конструктор у структуры? Нука-нука. Расскажи.


S> Не расскажу. Хоть и нельзя но можно. Просто под конструктором может выступаь любая статическая функция. С Новым Годом!!! И больше положительных Эмоций!!!


А зачем тогда структура-то? Не понимаю.

L>>Да и зачем ссылку? Ты собрался значения через нее что-ли возвращать?


S>Во Во сишники. Как Win Api так ссылки на структуры нормальное явление. Классы ни ни.

S> Только стек и никаких куч.

Вообще-то, класс и стуктура в сях мало чем отличаются. Обласью видимости по умолчанию только (у класов -- приват, а структур -- паблик). Именно по этому и используют структуры. Чтобы лишний раз public не писать.

S>>> Массив параметров вам тоже поможет


L>>Угу. Нам типа плевать на типобезопасность и все такое. Как что-ли?

S> Чья проблема, тот так и реализует.

Опять не понял. Ты скажи прямо, плевать или нет?
Если не плевать, то как быть с параметрами разного типа, если плевать, то с вами, пациент, все ясно.

S> Еще раз С Нвым Годом!!!!


А почему С большая?

P.S. Nothing personal.
... << RSDN@Home 1.1.2 beta 1 >>
Re[10]: Default-параметры в ф-циях на C#
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 26.12.03 15:51
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>А зачем тогда структура-то? Не понимаю.


L>>>Да и зачем ссылку? Ты собрался значения через нее что-ли возвращать?


Ну разница есть оссобенно когда структура много.....
S>>Во Во сишники. Как Win Api так ссылки на структуры нормальное явление. Классы ни ни.
S>> Только стек и никаких куч.

L>Вообще-то, класс и стуктура в сях мало чем отличаются. Обласью видимости по умолчанию только (у класов -- приват, а структур -- паблик). Именно по этому и используют структуры. Чтобы лишний раз public не писать.


А в Net это отличие. Структура в зависимости от объявления может находитсы и в стеке. И согласно скорости ее и надо использовть.

S>>>> Массив параметров вам тоже поможет


L>>>Угу. Нам типа плевать на типобезопасность и все такое. Как что-ли?

S>> Чья проблема, тот так и реализует.

L>Опять не понял. Ты скажи прямо, плевать или нет?

L>Если не плевать, то как быть с параметрами разного типа, если плевать, то с вами, пациент, все ясно.
Ну значит разные Consol итд к Вам. Зачем же такой. Применяются налево и на право.
Ты в какой области Доктор????
ГОВОРЮ ПРЯМО. КОНЕЧНО НЕ ПЛЕВАТЬ. ПО СВОЕЙ СУТИ ПЕРЕДАЧА ССЫЛКИ НА СТРУКТУРУ или Объект лучше, чем запихивать в стек кучу нетипизированных данных, и их обработка в вызываемой процедуре.
Но понятие дефолтных параметров, если я конечно не ошибаюсь, появилась с Васика как и именованные параметры. Суть в общем таже.
А если рассматривать как передача по значению структуры или отделно взятых параметров то физический смысл один и тот же.


С Наступающим Новым Годом!!!!

L>А почему С большая?


L>P.S. Nothing personal.
и солнце б утром не вставало, когда бы не было меня
Re[11]: Default-параметры в ф-циях на C#
От: Lloyd Россия  
Дата: 26.12.03 16:03
Оценка:
Здравствуйте, Serginio1, Вы писали:

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


L>>А зачем тогда структура-то? Не понимаю.


L>>>>Да и зачем ссылку? Ты собрался значения через нее что-ли возвращать?


S> Ну разница есть оссобенно когда структура много.....


Что много ...? Ты загадками сегодня лучше не говори, конец недели все-таки. Соображаю туго.

S>>>Во Во сишники. Как Win Api так ссылки на структуры нормальное явление. Классы ни ни.

S>>> Только стек и никаких куч.

L>>Вообще-то, класс и стуктура в сях мало чем отличаются. Обласью видимости по умолчанию только (у класов -- приват, а структур -- паблик). Именно по этому и используют структуры. Чтобы лишний раз public не писать.


S> А в Net это отличие. Структура в зависимости от объявления может находитсы и в стеке. И согласно скорости ее и надо использовть.


А причем тут тогда winapi?

S>>>>> Массив параметров вам тоже поможет


L>>>>Угу. Нам типа плевать на типобезопасность и все такое. Как что-ли?

S>>> Чья проблема, тот так и реализует.

L>>Опять не понял. Ты скажи прямо, плевать или нет?

L>>Если не плевать, то как быть с параметрами разного типа, если плевать, то с вами, пациент, все ясно.
S> Ну значит разные Consol итд к Вам. Зачем же такой. Применяются налево и на право.

Ну во первых Consol вряд ли где примняется. А вот Console -- другое дело.
А ты подумай, много ли там изпользуется от передаваемого параметра? ToString да проверка на IFormattable разве только. Если ты согласен этим ограничиться, то welcome.

S>Ты в какой области Доктор????

S> ГОВОРЮ ПРЯМО. КОНЕЧНО НЕ ПЛЕВАТЬ. ПО СВОЕЙ СУТИ ПЕРЕДАЧА ССЫЛКИ НА СТРУКТУРУ или Объект лучше, чем запихивать в стек кучу нетипизированных данных, и их обработка в вызываемой процедуре.

Чем передача ссылки на структуру лучше передачи объекта? Не понимаю. К тому же мы не решаем проблему изменеия переданных данных.

S> Но понятие дефолтных параметров, если я конечно не ошибаюсь, появилась с Васика как и именованные параметры. Суть в общем таже.


Сильно сомневаюсь.

S> А если рассматривать как передача по значению структуры или отделно взятых параметров то физический смысл один и тот же.


А зачем рассматривать передачу по значению структуры?

S> С Наступающим Новым Годом!!!!


L>>А почему С большая?


L>>P.S. Nothing personal.
... << RSDN@Home 1.1.2 beta 1 >>
Re[12]: Default-параметры в ф-циях на C#
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 26.12.03 16:32
Оценка:
Здравствуйте, Lloyd с Новым Наступающим Годом !!!

L>>>А зачем тогда структура-то? Не понимаю.

Да По Барабану. Хочешь объектк, хочешь структуру по ссылке. Или Есть какая то разница. Вернее она есть, но ....
L>>>>>Да и зачем ссылку? Ты собрался значения через нее что-ли возвращать?

S>> Ну разница есть оссобенно когда структура много.....


L>Что много ...? Ты загадками сегодня лучше не говори, конец недели все-таки. Соображаю туго.


Вот и я думаю, зачем в Win Api в основном по ссылке структуры передают ????
S>>>>Во Во сишники. Как Win Api так ссылки на структуры нормальное явление. Классы ни ни.
S>>>> Только стек и никаких куч.

L>>>Вообще-то, класс и стуктура в сях мало чем отличаются. Обласью видимости по умолчанию только (у класов -- приват, а структур -- паблик). Именно по этому и используют структуры. Чтобы лишний раз public не писать.


Только в WinApi они называются struct. А так у родоначальников надо спросить. Да и Win API это C, а там вроде объектов не было.

S>> А в Net это отличие. Структура в зависимости от объявления может находитсы и в стеке. И согласно скорости ее и надо использовть.


L>А причем тут тогда winapi?

Суть та же.
S>>>>>> Массив параметров вам тоже поможет

L>>>>>Угу. Нам типа плевать на типобезопасность и все такое. Как что-ли?

S>>>> Чья проблема, тот так и реализует.

L>>>Опять не понял. Ты скажи прямо, плевать или нет?

L>>>Если не плевать, то как быть с параметрами разного типа, если плевать, то с вами, пациент, все ясно.
S>> Ну значит разные Consol итд к Вам. Зачем же такой. Применяются налево и на право.

L>Ну во первых Consol вряд ли где примняется. А вот Console -- другое дело.

L>А ты подумай, много ли там изпользуется от передаваемого параметра? ToString да проверка на IFormattable разве только. Если ты согласен этим ограничиться, то welcome.

S>>Ты в какой области Доктор????

S>> ГОВОРЮ ПРЯМО. КОНЕЧНО НЕ ПЛЕВАТЬ. ПО СВОЕЙ СУТИ ПЕРЕДАЧА ССЫЛКИ НА СТРУКТУРУ или Объект лучше, чем запихивать в стек кучу нетипизированных данных, и их обработка в вызываемой процедуре.

L>Чем передача ссылки на структуру лучше передачи объекта? Не понимаю. К тому же мы не решаем проблему изменеия переданных данных.


По большому счету ни чем, просто за объектом GC начинает следить, и при очень большом выделении объектов это сразу заметно.

S>> Но понятие дефолтных параметров, если я конечно не ошибаюсь, появилась с Васика как и именованные параметры. Суть в общем таже.


L>Сильно сомневаюсь.


S>> А если рассматривать как передача по значению структуры или отделно взятых параметров то физический смысл один и тот же.


L>А зачем рассматривать передачу по значению структуры?

А чем передача Default-параметры параметров отличается от передачи структуры по значению????С Наступающим Новым Годом!!!!
и солнце б утром не вставало, когда бы не было меня
Re[7]: Default-параметры в ф-циях на C#
От: Oxy  
Дата: 30.12.03 07:22
Оценка:
Здравствуйте, Ransom Stark, Вы писали:

RS>С точки зрения дальнейшей работы надежнее и понятнее. "Либо так, либо так", вместо "так, но если очень хочется. то эдак"


Странно... Значит Страуструп нелогичный и непоследовательный идиот, а все из M$ мудрецы продвинутые, идиал во плоти так сказать...
Re[8]: Default-параметры в ф-циях на C#
От: Dax  
Дата: 30.12.03 16:47
Оценка:
Здравствуйте, Ransom Stark, Вы писали:

RS>Если обобщить и вернуться к теме — IMHO, параметры по умолчанию — не лучший выбор с точки зрения стиля и дизайна


Согласен, но это абсолютно не выбор для версионинга.
здесь можно глянуть
... << RSDN@Home 1.1.0 stable >>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.