Re[9]: Nullable & синтаксис
От: Пельмешко Россия blog
Дата: 21.04.09 15:10
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Было бы круто, если бы разработчики сделали такую имплементацию: null.ToString(){return "";}.

А>Задолбало писать простыни

result += o1.ToString() + ... + o10.ToString();


А если бы Вы правильно складывали строки, то есть StringBuilder'ом, то Вы бы обратили внимание на то, что null в качестве входного String он просто игнорирует Как и в строках формата
var buf = new StringBuilder();

buf.Append(o1);
buf.Append(o2);
buf.Append(o3);
....
Re[6]: Nullable & синтаксис
От: anton_t Россия  
Дата: 21.04.09 15:11
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Здравствуйте, Константин Л., Вы писали:


КЛ>>при чем здесь это? неравнозначный пример

GZ>Вполне равнозначный. Енто в SQL — NULL не является значением, а обозначает "ничего"(за что сильно поплатились, но это к Дейту). В Net такой ошибки не сделали, и null — всего лишь еще одно значение.

В SQL реализована нормальная трёхзначная логика. Что с ним не так?
Re[10]: Nullable & синтаксис
От: Аноним  
Дата: 21.04.09 15:16
Оценка:
Здравствуйте, anton_t, Вы писали:

А>>
А>>if (!string.IsNullOrEmpty(o1))
А>>    result += o1.ToString();
А>>...
А>>if (!string.IsNullOrEmpty(o10))
А>>    result += o10.ToString();
А>>

А>>вместо
А>>
А>>result += o1.ToString() + ... + o10.ToString();
А>>

_>Что-то ты путаешь. Даже такой код отработает без ошибок:
_>
_>Console.WriteLine((string)null + null);
_>

_>А если в твоём коде убрать совершенно лишние вызовы ToString, то и проврка на пустоту не нужна.

Сорри... Заврался.

if (o1 != null)
    result += o1.ToString();
...
if (o10 != null)
    result += o10.ToString();
Re[11]: Nullable & синтаксис
От: anton_t Россия  
Дата: 21.04.09 15:23
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Сорри... Заврался.


А>
А>if (o1 != null)
А>    result += o1.ToString();
А>...
А>if (o10 != null)
А>    result += o10.ToString();
А>


А, ну так-то да. Если 3-й C#, то можно так:

using System;

namespace ConsoleApplication44
{
    class Program
    {
        static void Main(string[] args)
        {
            object test = null;
            Console.WriteLine(test.ToStr());
            Console.ReadLine();
        }
    }

    public static class StringHelper
    {
        public static string ToStr (this object obj)
        {
            if (ReferenceEquals(obj, null))
                return string.Empty;

            return obj.ToString();
        }
    }
}
Re[7]: Nullable & синтаксис
От: GlebZ Россия  
Дата: 21.04.09 15:26
Оценка:
Здравствуйте, anton_t, Вы писали:

_>В SQL реализована нормальная трёхзначная логика. Что с ним не так?

Что значит нормальная? Сделай следующий запрос, и скажи насколько она трехзначна.
select field, count(field) from table group by field — где field содержит NULL значения
Re[8]: Nullable & синтаксис
От: anton_t Россия  
Дата: 21.04.09 15:32
Оценка:
Здравствуйте, GlebZ, Вы писали:

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


_>>В SQL реализована нормальная трёхзначная логика. Что с ним не так?

GZ>Что значит нормальная? Сделай следующий запрос, и скажи насколько она трехзначна.
GZ>select field, count(field) from table group by field — где field содержит NULL значения

Всё правильно получатся. Подозреваю, что бы получилось то, что нужно тебе, надо выполнить
select field, count(*) from [table] group by field
Re[9]: Nullable & синтаксис
От: GlebZ Россия  
Дата: 21.04.09 16:24
Оценка:
Здравствуйте, anton_t, Вы писали:

_>Всё правильно получатся.

С точки зрения SQL — да.
_>Подозреваю, что бы получилось то, что нужно тебе, надо выполнить
Мне не нужно. Мне нужно чтобы он исполнил мои ожидания. Я заказывал количество данных элементов. И как результат, либо вынесите NULL нафиг из запроса, либо означьте его как значение(пускай даже оно называется Unknown). Оно получается не то, и не то. В Net — такое проблемы нет.

У Дейта были более интересные примеры с совместимостью с реальным миром. Поищи через гугл.
Re[10]: Nullable & синтаксис
От: anton_t Россия  
Дата: 21.04.09 16:44
Оценка: 8 (1)
Здравствуйте, GlebZ, Вы писали:

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


_>>Всё правильно получатся.

GZ>С точки зрения SQL — да.
_>>Подозреваю, что бы получилось то, что нужно тебе, надо выполнить
GZ>Мне не нужно. Мне нужно чтобы он исполнил мои ожидания. Я заказывал количество данных элементов. И как результат, либо вынесите NULL нафиг из запроса, либо означьте его как значение(пускай даже оно называется Unknown). Оно получается не то, и не то.

Ожидания у всех разные. Нужно просто понять SQL и не ожидать от него чего-то не того. Запросил количество строк с определённым значением поля — получи. Ты же что-то имел ввиду, когда написал count(field) вместо count(*)?

GZ>В Net — такое проблемы нет.


GZ>У Дейта были более интересные примеры с совместимостью с реальным миром. Поищи через гугл.


Ага, нашёл http://www.citforum.ru/database/articles/nulls/
Re[12]: Nullable & синтаксис
От: Аноним  
Дата: 21.04.09 17:02
Оценка:
Здравствуйте, anton_t, Вы писали:

_>А, ну так-то да. Если 3-й C#, то можно так:


_>
_>using System;

_>namespace ConsoleApplication44
_>{
_>    class Program
_>    {
_>        static void Main(string[] args)
_>        {
_>            object test = null;
_>            Console.WriteLine(test.ToStr());
_>            Console.ReadLine();
_>        }
_>    }

_>    public static class StringHelper
_>    {
_>        public static string ToStr (this object obj)
_>        {
_>            if (ReferenceEquals(obj, null))
_>                return string.Empty;

_>            return obj.ToString();
_>        }
_>    }
_>}
_>


Вот так и начинаются всякие Pupkin.MyLibrary.dll. В МС могли бы и сами до этого хелпера дотумкать.
Re[13]: Nullable & синтаксис
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.04.09 19:51
Оценка: +2
Здравствуйте, Аноним, Вы писали:

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


_>>А, ну так-то да. Если 3-й C#, то можно так:


_>>
_>>using System;

_>>namespace ConsoleApplication44
_>>{
_>>    class Program
_>>    {
_>>        static void Main(string[] args)
_>>        {
_>>            object test = null;
_>>            Console.WriteLine(test.ToStr());
_>>            Console.ReadLine();
_>>        }
_>>    }

_>>    public static class StringHelper
_>>    {
_>>        public static string ToStr (this object obj)
_>>        {
_>>            if (ReferenceEquals(obj, null))
_>>                return string.Empty;

_>>            return obj.ToString();
_>>        }
_>>    }
_>>}
_>>


А>Вот так и начинаются всякие Pupkin.MyLibrary.dll. В МС могли бы и сами до этого хелпера дотумкать.

И почему модно считать себя умнее кучи программистов из МС?

См Convert.ToString
Re[6]: Nullable & синтаксис
От: Lloyd Россия  
Дата: 21.04.09 20:04
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Вполне равнозначный. Енто в SQL — NULL не является значением, а обозначает "ничего"(за что сильно поплатились, но это к Дейту). В Net такой ошибки не сделали, и null — всего лишь еще одно значение.


В типизированных языках любое значение имеет тип. Какой тип у "значения" null?
Re[11]: Nullable & синтаксис
От: GlebZ Россия  
Дата: 22.04.09 04:51
Оценка:
Здравствуйте, anton_t, Вы писали:

_>Ожидания у всех разные. Нужно просто понять SQL и не ожидать от него чего-то не того. Запросил количество строк с определённым значением поля — получи. Ты же что-то имел ввиду, когда написал count(field) вместо count(*)?

Какая разница между ними, если кортеж может содержать одно поле со значением NULL? Я оперирую данными, но в данном случае мы получаем разные результаты.

_>Ага, нашёл http://www.citforum.ru/database/articles/nulls/

Прикольно. Не читал. Впрочем тут же присутствует и критика оной:
http://www.citforum.ru/database/articles/nulls_criticism/
http://www.citforum.ru/database/articles/date_vs_rubinson/
http://www.citforum.ru/database/articles/grant_vs_rubinson/
Re[7]: Nullable & синтаксис
От: GlebZ Россия  
Дата: 22.04.09 05:13
Оценка: +1
Здравствуйте, Lloyd, Вы писали:

L>В типизированных языках любое значение имеет тип. Какой тип у "значения" null?

Зависит от контекста использования. Куда ты его присваиваешь, тот и тип. Однако — это демагогия. Ну например, void — не является значением. Однако ты же можешь получить его тип.
Re[14]: Nullable & синтаксис
От: Аноним  
Дата: 22.04.09 06:25
Оценка:
Здравствуйте, gandjustas, Вы писали:

А>>Вот так и начинаются всякие Pupkin.MyLibrary.dll. В МС могли бы и сами до этого хелпера дотумкать.

G>И почему модно считать себя умнее кучи программистов из МС?

G>См Convert.ToString


Первое и главное. Что общего у Convert.ToString и у примера, приведенного Антоном Т.?
Второе, при чем здесь ум и куча программистов? Если собрать кучу программистов, да еще покрасить в красно-сине-желто-зеленые цвета, они сделают продукт без единого серого пятнышка? Все, чего хотелось бы — чтоб соответствующая библиотека была сделана в МСе, чтобы не изобретать велосипед.
Re[15]: Nullable & синтаксис
От: _FRED_ Черногория
Дата: 22.04.09 06:36
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>>Вот так и начинаются всякие Pupkin.MyLibrary.dll. В МС могли бы и сами до этого хелпера дотумкать.

G>>И почему модно считать себя умнее кучи программистов из МС?

G>>См Convert.ToString


А>Первое и главное. Что общего у Convert.ToString и у примера, приведенного Антоном Т.?


То, то с помощью Convert.ToString тот
Автор: anton_t
Дата: 21.04.09
пример можно смело выкинуть. Возражение же относилось не к anton_t, а к Анониму, не знающему стандартной библиотеки:

Вот так и начинаются всякие Pupkin.MyLibrary.dll. В МС могли бы и сами до этого хелпера дотумкать.


В МС "дотумкали". Если бы Аноним
Автор:
Дата: 21.04.09
был лучше знаком с BCL, то вместо:
if (o1 != null)
    result += o1.ToString();
...
if (o10 != null)
    result += o10.ToString();

он написал бы
result += Convert.ToString(o1);
...
result += Convert.ToString(o10);

А мог бы и вовсе обойтись этим:
result += String.Concat(o1, …, o10);
Help will always be given at Hogwarts to those who ask for it.
Re[16]: Nullable & синтаксис
От: Аноним  
Дата: 22.04.09 07:01
Оценка:
Здравствуйте, _FRED_, Вы писали:

Относительно того, кто кому что написал — я не идиот и сам как-нибудь разберусь. Вопрос был, что общего.

Вы пишете:

_FR>он написал бы

_FR>
_FR>result += Convert.ToString(o1);
_FR>...
_FR>result += Convert.ToString(o10);
_FR>


Так вот, это НЕ то же самое, что предложил Антон:

_FR>result += o1.ToString();

_FR>...
_FR>result += o10.ToString();

Если бы там был реализован статичный SafeToString(this object o), это я бы принял как возражение и согласился. А так — ну, еще один способ написать код. Могу предложить много других. Например, o == null ? "" : o.ToString().

_FR>А мог бы и вовсе обойтись этим:

_FR>
result += String.Concat(o1, …, o10);


Вот про это не знал, поскольку привык пользоваться операторами (они, по-моему, читабельнее). Спасибо, теперь знаю. Но это частный случай, когда нужна конкатенация. (Таков уж мой пример). Я оставляю свое утверждение в силе: в МСе могли бы сделать код, предложенный Антоном и это было бы разумно. Почему? Потому, что это решение очевидно. Я сам независимо пришел к нему, когда возникла эта проблема. И еще один мой знакомый. Тоже независимо. Когда этот код независимо изобретают и реализуют, напоминает велосипедостроение.

Ладно, это были частности. Как насчет большого вопроса: зачем "у "ещё одного значения" есть некоторые ограничения"? Чем они обоснованы? null.ToString() — это было бы здорово.
Re[12]: Nullable & синтаксис
От: anton_t Россия  
Дата: 22.04.09 08:20
Оценка:
Здравствуйте, GlebZ, Вы писали:

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


_>>Ожидания у всех разные. Нужно просто понять SQL и не ожидать от него чего-то не того. Запросил количество строк с определённым значением поля — получи. Ты же что-то имел ввиду, когда написал count(field) вместо count(*)?

GZ>Какая разница между ними, если кортеж может содержать одно поле со значением NULL? Я оперирую данными, но в данном случае мы получаем разные результаты.

Разница большая. Первый считает строки, в которых определено (т.е. не NULL) поле field, а второй считает все строки.

_>>Ага, нашёл http://www.citforum.ru/database/articles/nulls/

GZ>Прикольно. Не читал. Впрочем тут же присутствует и критика оной:
GZ>http://www.citforum.ru/database/articles/nulls_criticism/
GZ>http://www.citforum.ru/database/articles/date_vs_rubinson/
GZ>http://www.citforum.ru/database/articles/grant_vs_rubinson/

Ага "Критика критики критики Дейта".
Re[17]: Nullable & синтаксис
От: Ziggi111 Россия  
Дата: 22.04.09 08:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А> Почему? Потому, что это решение очевидно.

Это вовсе не очевидно. потому что пустая строка и null в принципе разные значени. И не всегда нужно чтобы null.ToString() возвращал пустую строку. я обычно в таких случаях пишу

public static string GetString (this object Value, string defValue);
Re[13]: Nullable & синтаксис
От: GlebZ Россия  
Дата: 22.04.09 08:39
Оценка: 33 (1) +1
Здравствуйте, anton_t, Вы писали:

_>Разница большая. Первый считает строки, в которых определено (т.е. не NULL) поле field, а второй считает все строки.

Ты опять ввел логику хранения данных SQL. Между тем, данные либо есть, либо нет. Почему для group by данные есть а для count — нет?
Это противоречит цели SQL, который разрабатывался как язык доступа для кухарок. На мой взгляд это было ошибкой. В результате и кухарки остались на кухне, и язык испоганили.
зы. аднако уже пошел офтопп.
Re[14]: Nullable & синтаксис
От: _FRED_ Черногория
Дата: 22.04.09 08:54
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>… SQL, … разрабатывался как язык доступа для кухарок. На мой взгляд это было ошибкой. В результате и кухарки остались на кухне, и язык испоганили.


Help will always be given at Hogwarts to those who ask for it.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.