Replies (22)

  • @SkyLimited, Из-за приведения типов строка exitus приводится к нулю. Поэтому код возвращает true.
    Правда, тут ход мышления сильно диссонирует с js, в котором всё приводится к строке, а не к числу )
  • @modifier, Вот за что я ненавижу языки без жесткого требования соблюдения типов, бля. И никаого варнинга как в C++. Я минут пять охуевал искал ошибку вида if($act='exitus') Оказалось такое дерьмо.
  • @SkyLimited, Меня еще в си учили, что типы надо приводить типы явно.
  • @FGNTFG, в си тебе никто не даст число со строкой сравнить
  • @SkyLimited, Да, я про более общие случаи.
  • @FGNTFG, Нет, ну у меня же специально Error_reporting(E_ALL) стоит. И я специально пишу так, чтобы ни одного сраного Notice не было. И тут такое. И никакого тебе типа "Warning Compared signed and unsigned values". Разрыв шаблона просто. Как можно символьную строку приводить к числу и получать 0?!?!
  • @SkyLimited, У php тянется огромный исторический хвост всякого говна :\ Вообще, насколько я понимаю, такой способ приведения типов тянется ещё из перла.
  • @FGNTFG, В смысле? Да вообще такое приведение должно вываливать Exception или ошибку, ну NULL в самом крайнем случае.
  • @modifier, Perl?! Вот это настоящий Mind Fuck. С ужасом вспоминаю институт, огромную курсовую с регулярными выражениями.
  • @SkyLimited, Так это зависит от особенностей языка же. Скажем, python в таком случае всегда возвращает ошибку, так как это сильно типизированный язык. А вот php, как и, скажем, си — слабо типизированные. Только php динамически типизирован, а си — статически, что автоматически убивает половину проблем в последнем.
  • @SkyLimited, регулярки — это очень крутая штука.
  • @FGNTFG, И незаменимая во многих случаях.
  • @FGNTFG, Крутая-то да. Но вот врубиться в строчку вида ~\d\!!\sfnjhk\!2324{\d\d} гораздо сложнеее чем, например, в replace("i love perl" , "love", "fuck")
  • @modifier, А как ты понимаешь эти понятия "Слабо типизированный язык" и "Сильно типизированный язык"?
  • @modifier, Я просто сразу вот эту заметку вспомнил blogs.msdn.com
  • @SkyLimited, Это лишний повод писать комментарии
  • @SkyLimited, Об этом была отличная статья, которая лично у меня быстро расставила в голове всё по полочкам. Цитирую:
    "Сильная типизация выделяется тем, что язык не позволяет смешивать в выражениях различные типы и не выполняет автоматические неявные преобразования, например нельзя вычесть из строки множество. Языки со слабой типизацией выполняют множество неявных преобразований автоматически, даже если может произойти потеря точности или преобразование неоднозначно."

    habrahabr.ru
  • @modifier, Что-то в этом есть.
  • @SkyLimited, А в отношении этого поста я абсолютно согласен с первым комментом:
    "Мне кажется, что Эрик все-таки говорил о статической и динамической типизации, а не о строгой или слабой."

    А вопрос, является ли шарп динамически или статически типизированным языком, является открытым только с .NET 4.0, когда появился тип dynamic. И в этом отношении да, язык является типизированным и статически, и динамически — короче, всё зависит от образа мышления программиста и того, как он оперирует переменными.
  • @modifier, Ну в общем и целом я так понял, это связано с тем накладываются ограничения на преобразование типов в языке (строгая нестрогая) и когда осуществляется получение типа переменной (при компиляции runtime) (aka необходимость жесткого задания типа переменной)