-
> Inovet © (18.02.17 09:35) [57]
> а так им просто лень записывать
А за зарплатой им не лень приходить?
-
Проблема в том, что в нашем мире, где больше одного алфавита, регистронезависимое сравнение двух строк штука настолько ненадежная, что если с этим можно не связываться, то лучше не связываться.
Так-то мне самому удобнее мыслить регистронезависимо, но жизнь не всегда делает так, как мне удобно.
-
> Kerk © (22.02.17 12:40) [61] > > Проблема в том, что в нашем мире, где больше одного алфавита, > регистронезависимое сравнение двух строк штука настолько > ненадежная, что если с этим можно не связываться, то лучше > не связываться. > > Так-то мне самому удобнее мыслить регистронезависимо, но > жизнь не всегда делает так, как мне удобно. >
Поясни сию глубокую проблему.
-
> [62] Германн © (23.02.17 03:02)
Я тут встряну. Мыслить надо регистрозависимо. Мы ведь в писменной речи регистры стараемся выдерживать, особенно в немецких языках. В коде тоже не лишнее.
-
> Inovet © (23.02.17 03:08) [63] > > > [62] Германн © (23.02.17 03:02) > > Я тут встряну. Мыслить надо регистрозависимо. Мы ведь в > писменной речи регистры стараемся выдерживать, особенно > в немецких языках. В коде тоже не лишнее. >
В коде чего? Письменная речь это одно. Текст для компилятора это другое.
-
> [64] Германн © (23.02.17 03:30) > Текст для компилятора это другое.
Текст кода для человека, а если и компилятор помогает, так ещё лучше.
-
> Германн © (23.02.17 03:02) [62]
Я отвечу песней.
function Test: Boolean; begin Result := 'We will rock you' = 'We will rock you'; end;
function Test2: Boolean; begin Result := 'WE WILL ROCK YOU'.ToLower = 'We will rock you'.ToLower; end;
Первая функция всегда возвращает True. Результат выполнения второй функции зависит от локальных настроек компьютера, на котором программа выполняется.
-
Kerk © (23.02.17 10:36) [66]
> Результат выполнения второй функции зависит от локальных > настроек компьютера, на котором программа выполняется.
Если не трудно, приведи пример, когда локальные настройки компьютера разным образом переводят в нижний регистр символы латинского алфавита ?
-
> [66] Kerk © (23.02.17 10:36)
Я совсем не понял - какое отношение строковые константы имеют к идентификаторам?
-
> Игорь Шевченко © (23.02.17 10:48) [67] > Если не трудно, приведи пример, когда локальные настройки > компьютера разным образом переводят в нижний регистр символы > латинского алфавита ?
В турецком, как минимум. Там 'I'.ToLower <> 'i' Вот как там эта буква работает (внимательно смотрим на первую букву): "INTEGER".ToLower = "ınteger"
"integer".ToUpper = "İNTEGER" > Inovet © (23.02.17 10:51) [68] > > > [66] Kerk © (23.02.17 10:36) > > Я совсем не понял - какое отношение строковые константы > имеют к идентификаторам?
А идентификаторы - это не строки? Имена файлов - это не строки?
-
> [69] Kerk © (23.02.17 11:01) > А идентификаторы - это не строки? Имена файлов - это не > строки?
Если так обобщать, то однозначно регистрозависимые должны быть компиляторы. Я только за.
-
Kerk © (23.02.17 11:01) [69]
Это для юникода ? Ты все-таки настройки скажи, любопытно проверить, как не работает регистронезависимое сравнение для нетурецких текстов.
-
У всех свое, с этим не поспорить, кому то так кому то эдак. Мы достаточно легко и не принужденно отличаем mySuperPuperVar от mysuperpupervar, ни каких проблем не испытываем. И когда пишем на шарпе это помогает, а возможности ИДЕ только в плюс.
-
> Игорь Шевченко © (23.02.17 12:36) [71]
Конечно юникод, сейчас везде юникод :) Вот тут подробно: The Motivation: The Turkish-I Problem https://msdn.microsoft.com/en-us/library/ms973919.aspx#stringsinnet20_topic5Воспроизвести легко: Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US") Console.WriteLine("Culture = {0}", Thread.CurrentThread.CurrentCulture.DisplayName); Console.WriteLine("(file == FILE) = {0}", (String.Compare("file", "FILE", true) == 0));
Thread.CurrentThread.CurrentCulture = new CultureInfo("tr-TR"); Console.WriteLine("Culture = {0}", Thread.CurrentThread.CurrentCulture.DisplayName); Console.WriteLine("(file == FILE) = {0}", (String.Compare("file", "FILE", true) == 0));
Culture = English (United States)
(file == FILE) = True
Culture = Turkish (Turkey)
(file == FILE) = False
-
> как не работает регистронезависимое сравнение для нетурецких > текстов.
Оно, кстати, работает. Просто работает по-турецким правилам. Которые внезапно отличаются от привычных нам.
-
> [72] ухты © (23.02.17 12:37) > mySuperPuperVar от mysuperpupervar
Второе вырвиглазное и выносмозгное.
-
> [73] Kerk © (23.02.17 12:52) > (file == FILE) = True
Пардон, а это что за кострукция. Что она делает?
-
> Inovet © (23.02.17 13:26) [76]
Это не конструкция, это строка вывода программы указанной выше :) Результат сравнения двух строк.
-
> [77] Kerk © (23.02.17 13:58)
Теперь понял.:)
|