Жабное

Как можно называть языком программирования нечто, в котором тип переменной явно объявлять не надо (да и вообще объявлять тоже не особенно нужно), большая часть языка свободно понимает в зависимости от контекста где надо и не надо что тут как строку, а тут как число…. Но при этом в некоторых случаях требует только строго следования типу. Т.е. приведенная ниже конструкция хрен работает (Google Maps API v2).


z='15';
map.setZoom(z);

А вот такая работает как за здрасти.

z=parseInt('15');
map.setZoom(z);

И на фоне этого совершенно издевательски выглядит, безотносительного типа этой несчастной зэт.


alert(z)

Жуть какая-то :) Пока отловил этот глюк, думал поседею.

Кстати!!! На свалке GPS треков произошли некоторые изменения (а скоро произойдут и дополнения). Так что если кому чего хочется видеть там из плюшек – рассказывайте, а то мне в принципе и того спартанства, что есть хватает.

  1. lizard
    5 Август 2010 в 10:49 | #1

    Ой, какие мы нежные. Можно подумать в пхп сильно обьявляются как сами переменные, так и их тип. Там точно так же можно наступить на грабли приведения типов в разных узких местах.

    В интернете много копий сломано над тезисом “Строгая формализация ЯП – хорошо это или плохо”. Как и везде, в общем-то, у каждой стороны есть свои плючы и минусы.

  2. 5 Август 2010 в 12:23 | #2

    @lizard
    В ПХП ни разу не видел, что бы строка содержащая только цифры не была воспринята в нужном месте как инт. Даже если принудительно объявить её строкой.

    С жабосриптром работаю не много, и всегда дико удивляюсь возможности конструкции вида
    href.split(‘&’)[1]. Как бы понимаю, что ничего невозможного, но человек воспитанный на классических паскале и с воспринимает как-то не совсем адекватно.

  3. 6 Август 2010 в 07:29 | #3

    Язык, как язык. Тип есть и определяется при присваивании. Достаточно типично для скриптовых, т.е. таких, на которых нужно быстренько писать что-то не очень сложное. А что alert принимает и строку и число – так почему бы и нет? Перегрузка функций есть даже в таких строго типизированых языках, как собсно Java или, там, C++.
    Кстати, рекомендую выучить Python. Там тоже такой подход к типам. И вполне валидна операция сравнения строки и числа. Причём ты фиг догадаешься по какому принципу определяется результат ;)

  4. 6 Август 2010 в 08:24 | #4

    @Moveton
    Дык лажа не в том, что тип не присваивается, а в том что не везде работает. Вместо alert можно привести операцию суммирования или что-то еще характерное для int. Весь прикол в том, что все эти языки для “написать побыстрому” уже давно используются для очень крупных проектов.

    А про перезагрузку функций… Всё равно индекс массива у функции дико смотрится.

  5. lizard
    6 Август 2010 в 08:54 | #5

    >Причём ты фиг догадаешься по какому принципу определяется результат ;)
    Ну не скажи. в отличии от, питон отлично документирован :)
    И поведение его точно такое, как описано в документации, а не как описано в 15 коментарии пользователя к документации :)

    Objects of different types, except different numeric types and different string types, never compare equal; such objects are ordered consistently but arbitrarily (so that sorting a heterogeneous array yields a consistent result). Furthermore, some types (for example, file objects) support only a degenerate notion of comparison where any two objects of that type are unequal. Again, such objects are ordered arbitrarily but consistently. The <, and >= operators will raise a TypeError exception when any operand is a complex number.
    (c) http://docs.python.org/library/stdtypes.html

    >Всё равно индекс массива у функции дико смотрится.
    Смотря, что возвращает функция. Если масив – то почему бы и нет?
    Я после питона частеньо в пхп пытаюсь так писать, а он чего-то не хочет :) )

    ЗЫЖ простите за возможные ошибки и опечатки, три раза перечитывал, и три раза находил новые, еще не проснуля :)

  6. 6 Август 2010 в 15:29 | #6

    @lizard
    Мне не надо питоновскую доку цитировать. Я это в ней уже прочитал. Как раз после того, как пару часов угробил в отладке, пока нашёл, почему ж написаное такой странный результат выдаёт.

    @white
    Такое. “Это невозможно понять, это нужно запомнить”. Хочешь простоты преобразований: пиши на REXX или sh. Кстати, если строка+число – это сумма, а не строковая конкатенация, то это непривычно уже для меня. Хотя давно не брал я в руки шашек. Уже и не помню, какой в яваскрипте оператор для конкатенации.

  7. lizard
    6 Август 2010 в 16:31 | #7

    /me пожал плечами.

  1. Пока что нет уведомлений.

[]