Здравствуйте, Геннадий Васильев, Вы писали:
AVK>>>>Применяется широко означает что не вносит каких то проблем. Разницу сечешь? ГВ>>>Нет. Это означает только то, что "применяется широко". В качестве примера. Сколько раз твердили, что copy&past — программирование суть создание проблем самим себе? И что? Всё равно же часто применяется. Но сути-то это не меняет. AVK>>Хорошо, расскажи тогда мне с какими ужасными проблемами я сталкиваюсь из-за наличия ToString()
ГВ>Не переводи стрелки. Сейчас я пример привёл только для того, чтобы показать, что и милиион леммингов может ошибаться.
Я вот как раз не перевожу.
ГВ>Ну а что до заморочек, то вот здесь
Безусловно.
M>Опять разные формы для семантически одинаковых операций?
С чего ты взял что они семантически одинаковы? В колонке id гарантированно int, а вот в ShortName может быть либо string, либо DBNull.
M>P.S. Изложенное выше не есть аргумент в пользу какой то стороны в споре, просто мои use cases — без какого-либо анализа.
M>>Первая и вторая строчки делают разные вещи?
AVK>Безусловно.
M>>Опять разные формы для семантически одинаковых операций?
AVK>С чего ты взял что они семантически одинаковы?
Я просто спрашиваю.
AVK> В колонке id гарантированно int,
Вижу
(int)r["id"]
AVK> а вот в ShortName может быть либо string, либо DBNull.
А вот здесь "ShortName может быть либо string, либо DBNull" слабо выражено:
r["ShortForumName"].ToString();
Скорее здесь сказано "а в ShortForumName лежит какой-то object, его надо преобразовать в "human-readable string that is culture-sensitive"".
Можно представить следующую семантику приведенного выше фрагмента (возможно семантика в Janus не такая):
* ShortName приходит в как string или DBNull
* DbNull пришедший из запроса означает что данные не найдены
* Для не найденных данных мы используем default значение ''
Здравствуйте, mbergal, Вы писали:
M>[...]
AVK>>А если id это Form то вобще работать не будет.
M>Не понимаю причем тут Form.
А при чем тут string?
M>Хорошо. А мне обычно обрабатывать и форматировать приходится, в зависимости от типа исключения.
Это просто недописки — воткнули для отладки, на нормальную обработку не заменили.
AVK>> а вот в ShortName может быть либо string, либо DBNull.
M>А вот здесь "ShortName может быть либо string, либо DBNull" слабо выражено:
M>
M>r["ShortForumName"].ToString();
M>
M>Скорее здесь сказано "а в ShortForumName лежит какой-то object, его надо преобразовать в "human-readable string that is culture-sensitive"".
Ну так и есть. Подробности того что там лежит это уже более подробная информация.
M>Мне было бы яснее и спокойнее, чем ToString()
Это потому что вы незнакомы с ADO.NET.
AVK>>Ага, особенно мне первый вариант понравился.
M>Какой "первый вариант"?
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, mbergal, Вы писали:
M>>[...]
AVK>>>А если id это Form то вобще работать не будет.
M>>Не понимаю причем тут Form.
AVK>А при чем тут string?
А, теперь вопрос понятен. Также как и int, DateTime etc., формирование SQL на основе string является типичной операцией. С Form мне кажется не такая типичная.
Мне легко, когда семантически одинаковые операции выражены синтаксически одинаково. Так что в приведенном use case — id.ToString() плохо, потому что для строки пришлось бы писать по-другому.
Кстати, а можно реально добиться синтаксиса id.ToSqlString() ? Я понимаю можно сделать
public string ToSqlString( int ) {}
...
[...]
AVK>>> а вот в ShortName может быть либо string, либо DBNull.
M>>А вот здесь "ShortName может быть либо string, либо DBNull" слабо выражено:
M>>
M>>r["ShortForumName"].ToString();
M>>
M>>Скорее здесь сказано "а в ShortForumName лежит какой-то object, его надо преобразовать в "human-readable string that is culture-sensitive"".
AVK>Ну так и есть. Подробности того что там лежит это уже более подробная информация.
M>>Мне было бы яснее и спокойнее, чем ToString()
AVK>Это потому что вы незнакомы с ADO.NET.
Может быть. Вы имеете в виду что DBNull.ToString() == "" или что-то другое?
Все равно — я бы так не делал ( "ShortName может быть либо string, либо DBNull" намного лучше описывает суть дела, чем "в ShortForumName лежит какой-то object" )
Здравствуйте, mbergal, Вы писали:
M>А, теперь вопрос понятен. Также как и int, DateTime etc., формирование SQL на основе string является типичной операцией.
Абсолютно нетипичная. Поскольку в случае строк используются параметры.
M>Мне легко, когда семантически одинаковые операции выражены синтаксически одинаково. Так что в приведенном use case — id.ToString() плохо, потому что для строки пришлось бы писать по-другому.
Это всего лишь экономия на коде, с параметрами возиться дольше. Опять же к ToString это никакого отношения не имеет.
M>Кстати, а можно реально добиться синтаксиса id.ToSqlString() ?
Не понял вопроса.
M>>>Мне было бы яснее и спокойнее, чем ToString()
AVK>>Это потому что вы незнакомы с ADO.NET.
M>Может быть. Вы имеете в виду что DBNull.ToString() == "" или что-то другое? M>Все равно — я бы так не делал ( "ShortName может быть либо string, либо DBNull" намного лучше описывает суть дела, чем "в ShortForumName лежит какой-то object" )
Ага, и плевать что это в несколько раз больше кода?
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, mbergal, Вы писали:
M>>А, теперь вопрос понятен. Также как и int, DateTime etc., формирование SQL на основе string является типичной операцией.
AVK>Абсолютно нетипичная. Поскольку в случае строк используются параметры.
Т.е. pattern такой, а правильно понимаю?
1. Если параметрами SQL-statement являются только int'ами - пишем "sql ..." + <int>.ToString()
2. Если не все из них являются int'ами
2.1 Если не нужно sql-statement в строке используем параметры (binding)
2.2 Если нужна строка sql-statement (нечасто случается но бывает) - используем ???
А если не такой, то какой?
[...]
M>>Кстати, а можно реально добиться синтаксиса id.ToSqlString() ?
AVK>Не понял вопроса.
можно ли сделать так, чтобы id.ToSqlString() работало?
Например, написав где-нибудь string ToSqlString( int ).
M>>>>Мне было бы яснее и спокойнее, чем ToString()
AVK>>>Это потому что вы незнакомы с ADO.NET.
M>>Может быть. Вы имеете в виду что DBNull.ToString() == "" или что-то другое? M>>Все равно — я бы так не делал ( "ShortName может быть либо string, либо DBNull" намного лучше описывает суть дела, чем "в ShortForumName лежит какой-то object" )
AVK>Ага, и плевать что это в несколько раз больше кода?
Это правильный код — наверное бы писал. Вопрос, как много, как скоро бы надоело и какие бы абстракции я ввел чтобы стало лучше.
Здравствуйте, mbergal, Вы писали:
M>Т.е. pattern такой, а правильно понимаю?
Нет никакого паттерна. Просто если параметр целое то надобности в подъеме полноценной механики нет.
AVK>>Не понял вопроса.
M>можно ли сделать так, чтобы id.ToSqlString() работало?
Если это int то нет.
AVK>>Ага, и плевать что это в несколько раз больше кода?
M>Это правильный код — наверное бы писал.
Здравствуйте, AndrewVK, Вы писали:
M>>Это правильный код — наверное бы писал. AVK>Правильный этот тот который работает.
К сожалению, это не единственный критерий "правильности" кода. Необходимый, но не единственный.
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
я отвечал Владу по этому поводу. AVK>Описания проблем я там не увидел.
А вот это:
Проблема метода ToString() состоит в неопределённости его семантики. Что у него на выходе? Будут ли обрезаны незначащие нули у типов с плавающей точкой? С какой точностью он выведет данные? Короче, то же самое, что и спецификация %f для функции sprintf(...).
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Здравствуйте, VladD2, Вы писали:
ГВ>>>1 2 3 дата?
ГВ>Это если у тебя дробная часть нулевая. А если нужно гарантировать ширину выводимого поля? ИМХО, та же самая проблема, что и при использовании спецификаций "%f" или "%n.nf".
Здравствуйте, Геннадий Васильев, Вы писали:
M>>>Это правильный код — наверное бы писал. AVK>>Правильный этот тот который работает.
ГВ>К сожалению, это не единственный критерий "правильности" кода. Необходимый, но не единственный.
Сайдемся на том, что правильный код — это код который работает и не создает проблем. Так вот этот именн такой.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>[q] ГВ>Проблема метода ToString() состоит в неопределённости его семантики.
Это не проблема, это опять философия и принципы.
ГВ> Что у него на выходе? Будут ли обрезаны незначащие нули у типов с плавающей точкой? С какой точностью он выведет данные?
Зависит от настроек системы. В 99% случаев это именно тот вариант, который нужен.
Здравствуйте, VladD2, Вы писали:
M>>>>Это правильный код — наверное бы писал. AVK>>>Правильный этот тот который работает. ГВ>>К сожалению, это не единственный критерий "правильности" кода. Необходимый, но не единственный. VD>Сайдемся на том, что правильный код — это код который работает и не создает проблем. Так вот этот именн такой.
Это ты о котором?
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, AndrewVK, Вы писали:
M>>Что будет показано пользователю? M>>Exeception: <exception type> M>>[...]blablabla M>>+ Stack Trace M>>Это действительно то что надо? AVK>>Да. M>>Хорошо. А мне обычно обрабатывать и форматировать приходится, в зависимости от типа исключения. AVK>Это просто недописки — воткнули для отладки, на нормальную обработку не заменили.
Вот и первое подтверждение тезису:
ГВ>С другой стороны это также может означть, что в некоторых случаях приходиться поступаться пожеланиями к строковому представлению в угоду уже имеющейся реализации. Только-то и всего.
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, VladD2, Вы писали:
VD>Главное, что очень часто нужно просто результат по умолчанию.
Об этом ты уже говорил:
VD> Они [требования — ГВ.] в 90% случаев не предявляются.
Осталось определить группу ситуаций, в которых достаточно получить только "результат по умолчанию". Ситуации использования String.ToString() не учитываем, т.к. это — простое копирование.
Это просто недописки — воткнули для отладки, на нормальную обработку не заменили.
Какие ещё варианты?
Да, учти ещё, что далеко не всегда удобно получить "3.24465830E-3" вместо "0.003245", а преобразование строки в строку по сути, тривиально.
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, AndrewVK, Вы писали:
ГВ>>Проблема метода ToString() состоит в неопределённости его семантики. AVK>Это не проблема, это опять философия и принципы.
Ну, тогда нам и спорить-то не о чем. Ты попросту не видишь проблемы там, где она есть.
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, VladD2, Вы писали:
VD> Что-же можешь вместе с ПК соблюдать правила разных ОЦП и т.п. даже во прики банальному разуму.
Почему-то вспомнилась ода Ломоносова:
Дерзайте, ныне ободренны,
Реченьем вашим показать,
Что может собственных платонов
И быстрых разумов невтонов // <- тут бы надо "банальных разумов VladD2"
Земля российская рождать.