|
Модераторы: LSD |
|
||
|
Logo |
|
|||
Опытный Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: нет Всего: 10 |
Что лучше? Какие преимущества у одной перед другой?
|
|||
|
||||
azesmcar |
|
|||
uploading... Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 2 Всего: 211 |
||||
|
||||
Lazin |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 4 Всего: 154 |
строгая
|
|||
|
||||
nginx |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 81 Регистрация: 20.6.2009 Репутация: -4 Всего: -3 |
Logo, строгая, ненавижу, что начал свое знакомство с программирование с PHP
он не только динамично-типиз, он в свою очередь еще и слабо-типиз в отличии от Питона лучше начинать с .NET или Java любому начинающему |
|||
|
||||
Logo |
|
|||
Опытный Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: нет Всего: 10 |
Я вот больше работал с языками с не строгой типизацией - PHP, Perl, JavaScript. Со строгими, вроде C++(относительно строгой), значительно меньше. Ну а начинал с бейсика)
Можно пример подобных ошибок? |
|||
|
||||
azesmcar |
|
|||
uploading... Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 2 Всего: 211 |
ну например
да, этого можно избежать используя ===, но дело в том, что сравнение разных типов может являться ошибкой и тут нужно внимание программиста а не результат в виде false (или тем более true). В языках со строгой типизацией тут понадобился бы cast, тем самым вы сообщите компилятору/интерпретатору что вы на самом деле хотите сравнить два разных типа. Это нагляднее и для программиста, читающего код. Строгая типизация позволяет уберечься от многих ошибок, совершенных по невнимательности. К примеру в C++ у людей нередко возникают ошибки в связи с неявным приведением int-а к bool. Это сообщение отредактировал(а) azesmcar - 10.2.2010, 12:16 |
|||
|
||||
kemiisto |
|
|||
Дикий Кот. =^.^= Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 3 Всего: 160 |
Logo, прежде чем говорить о типизации, предоставьте определения: что Вы называете строгой и нестрогой типизацией. А пока разговор ниачём.
К примеру, если в понятие строгая типизация включать невозможность неявного приведения типов (implicit type conversion), что, кстати говоря, делают часто, то Python нестрого типизированный язык. Иногда строгой считают типизацию, где вообще запрещены любые приведения типов - будь то неавные или явные. Так что - ждём-с определений. -------------------- |
|||
|
||||
Logo |
|
||||
Опытный Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: нет Всего: 10 |
Это да, операторы сравнения в некоторых языках черезчур перегружены, сравнивая числа и строки. Легко забыть, что имеет приоритет при сравнении разных типов, числовой или строковый.
Здесь мне нравится подход Perl, в котором разные операторы сравнения строк и чисел
С учетом этого, могут быть какие-то ошибки? А PHP вообще отдельная история
Но это не значит что это гуд. Это сообщение отредактировал(а) Logo - 10.2.2010, 13:15 |
||||
|
|||||
Lazin |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 4 Всего: 154 |
kemiisto, неявное приведение типов тоже бывает разным, к примеру, в приведении int к double я ничего плохого не вижу, а наоборот лучше только явно, причем функциями floor и ceil
|
|||
|
||||
Logo |
|
|||
Опытный Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: нет Всего: 10 |
А что там не понятного - 0 - false, остальное true, как везде |
|||
|
||||
azesmcar |
|
|||
uploading... Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 2 Всего: 211 |
я не говорил что непонятно я говорю проблемы возникают иногда..представь что переменная раньше была типа bool, хранила два статуса, потом расширили програмку (ну не учли этого) и сменили тип на int, вот забудешь в каком нибудь if -е поменять потом ищи проблему в логике, а ведь компилируется нормально. Кому как, по мне так лучше бы этого не было.
если не ошибаюсь, джава этого не позволяет. Это сообщение отредактировал(а) azesmcar - 10.2.2010, 12:45 |
|||
|
||||
Logo |
|
||||
Опытный Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: нет Всего: 10 |
Да как и все - строгая, когда не производятся не явные приведения типов, не строгая - когда производятся. Динамическая - когда можно менять тип по ходу выполнения программы, и соответственно проверка типов на этапе исполнения - статическая, наоборот, на этапе компиляции. Добавлено через 2 минуты и 31 секунду
... при приведении типов |
||||
|
|||||
kemiisto |
|
|||
Дикий Кот. =^.^= Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 3 Всего: 160 |
Спасибо, что просветил, мил человек. А то я ведь не знал. Думал, что только 2 типа данных существует на свете: int и bool. Насчёт приведение целое -> The IEEE Standard for Floating-Point Number: тут тоже есть свои подводные камни. Не всякое целое число точно представимо. Думаю, ты про это прекрасно знаешь и, конечно же, читал What Every Computer Scientist Should Know About Floating-Point Arithmetic. Но уж коли ты решил мне рассказать про общечеловеческие ценности, я тоже в долгу не останусь. А так, да, согласен. В Oberon фенкция называиццо ENTIER(x). Аргумент - real type, тип результате - LONGINT. Возвращает largest integer not greater than x. Это сообщение отредактировал(а) kemiisto - 10.2.2010, 13:16 -------------------- |
|||
|
||||
UniBomb |
|
|||
Новичок Награды: 1 Профиль Группа: Участник Клуба Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: нет Всего: 97 |
В руби такое не проходит. 0 и nil там всё же разные вещи. Даже оператор === говорит не эквивалентны Раби и тут говорит, что ни о каком равенстве никакой речи и быть не может. Вы таки наверное уже догадались? Мне нравится нестрогая типизация в Ruby, но я в этом ничего не понимаю |
|||
|
||||
MAKCim |
|
|||
Воін дZэна Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 8 Всего: 207 |
юзайте аннотации и декораторы для проверки типов
ps. код честно взят из одного источника ;) -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
GrayCardinal |
|
|||
Фигасе Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: нет Всего: 58 |
Что значит лучше ? Юзать можно обе. А ошибки из-за невнимательности в любом случае будут...
Добавлено через 21 секунду (не голосовал) |
|||
|
||||
Logo |
|
|||
Опытный Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: нет Всего: 10 |
Да, согласен. Ситуация хотя и очень маловероятная, но возможная. Тоже верно, если с большими числами работать. Хотя с точность чисел с плавающей точкой и так надо держать ухо востро. Руби проверил, он тут себя ведет тоже не лучшим образом. И ошибку не возвращает, и сравнение не проводит. Питон, кстати, так же работает. |
|||
|
||||
Akella |
|
|||
Творец Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
Да, строгая лучше. Меньше потенциальных ошибок. Хотя иногда приходится и очень удобно применять вариантный тип, который как бы не имеет типа
Т.е. можно было бы в опрос добавить ещё пункт: строгая с применением вариантных типов Это сообщение отредактировал(а) Akella - 13.2.2010, 10:45 |
|||
|
||||
segrey |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 54 Регистрация: 26.12.2006 Репутация: нет Всего: нет |
Честно говоря, в php не хватает что - то вроде такого:
чтобы как в С++, в зависимости от того какие аргументы пришли - та функция и вызвалась. Можно конечно условие в конструкторе поставить, но это не кошерно |
|||
|
||||
UniBomb |
|
|||
Новичок Награды: 1 Профиль Группа: Участник Клуба Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: нет Всего: 97 |
Ну почему же - в ruby есть оператор сравнения <=>, который будет равен nil если сравниваемые величины не подлежат сравнению (как в данном случае). Подмешанный оператор == основан на предыдущем и вероятно выдаёт false всегда, когда не true. По-моему тут всё логично. |
|||
|
||||
mrbrooks |
|
|||
трололомен Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: нет Всего: 306 |
строгая, ибо это не только гламурно, но и кошерно.
|
|||
|
||||
Logo |
|
|||
Опытный Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: нет Всего: 10 |
Но nil и 0 в контексте if одно и тоже ведь. И вообще речь не о том. Он не выдает ошибки при сравнении "1" и 1. Что бы, как Java, избавить от потенциальных ошибок. Вместо этого продолжает выполнять программу. Однако и сравнение он тоже не производит. Что бы, как Perl, что бы не заботится типах. Таким образом совмещая недостатки того и другого |
|||
|
||||
fixxer |
|
||||
Опытный Профиль Группа: Участник Сообщений: 672 Регистрация: 14.9.2006 Где: Саратов, Россия Репутация: нет Всего: 27 |
Таким образом не стоит забывать, что в Ruby все объект и == это метод. Таким образом это можно сравнивать с методом equals в Java, а не с == в Java. -------------------- |
||||
|
|||||
k0rvin |
|
|||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
я надеюсь Вы не про Variant из Делфи (точнее COM/OLE, я таких тонкостей не знаю)? -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
|||
|
||||
A5uKa |
|
|||
TЋ♥s F1rȜ iƧ BurȠiƞg Профиль Группа: Awaiting Authorisation Сообщений: 1928 Регистрация: 30.8.2008 Репутация: 1 Всего: 16 |
строгая с возможностью не строгой
|
|||
|
||||
Akella |
|
|||
Творец Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
k0rvin, когда я говорил о вариантном типе, то имел ввиду именно Variant. Но есть ещё OleVariant.
|
|||
|
||||
k0rvin |
|
|||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
но это же ужасный костыль и имеет отношение не к строгой/нестрогой типизации, а к статической/динамической =) -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
|||
|
||||
qweqwe |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 55 Регистрация: 31.1.2007 Репутация: нет Всего: 0 |
||||
|
||||
nerezus |
|
|||
Вселенский отказник Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 13 Всего: 43 |
При динамической(как правило в нестрогой она, ну за исключением всяких там C) все равно приходится вести xxxdoc теги, в итоге кода больше выходит, а проферок типизации нету.
|
|||
|
||||
SneG0K |
|
|||
Max Mara Профиль Группа: Завсегдатай Сообщений: 1887 Регистрация: 1.12.2007 Где: Wis Dells Репутация: нет Всего: 54 |
||||
|
||||
k0rvin |
|
||||||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
что? переформулируйте мысль на более литературном или техническом языке.
ня? Это сообщение отредактировал(а) k0rvin - 24.4.2010, 00:43 -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||||
|
|||||||
qweqwe |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 55 Регистрация: 31.1.2007 Репутация: нет Всего: 0 |
есть, но только в рантайме как вы все ### тыкать сюда эту абсолютную истину вот приведи пример задачи, которая выигрывает от нестрогой типизации товарищ главнокомандующий, вы путаете строгую типизацию и статическую типизацию |
|||
|
||||
JackYF |
|
|||
полуавантюрист Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 2 Всего: 162 |
||||
|
||||
kemiisto |
|
|||
Дикий Кот. =^.^= Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 3 Всего: 160 |
Хм... Что-то я сомневаюсь. Итак, JackYF, я бы ещё понял, если бы речь шла о преимуществах динамической типизации в плане высокой скорости прототипирования. Но нестрогая будет только мешать. Если исходить из вышеупомянутых определений, то, скажем, в Python типизация динамическая строгая, а в PHP - динамическая нестрогая. Бенефиты от динамической типизации получим и там и там, а вот об грабли нестрогой типизации, расставленные в PHP, мы весь лоб расшибём. P.S. В Python типизация не совсем строгая... -------------------- |
|||
|
||||
k0rvin |
|
||||||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
пример:
будь типизация сильно строгой, результат assoc необходимо было бы писать "(when (not (null x)) ..." или типа того мелочь, но чем больше кода, тем количество таких мелочей растет в геометрической прогресси => растёт трудность восприятия кода
не совсем, чем строже типизация, тем уверенней компилятор может производить оптимизации, ведь он может однозначно установить тип, а не думать "тут возможны такие типы: ..." Это сообщение отредактировал(а) k0rvin - 24.4.2010, 19:51 -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||||
|
|||||||
kemiisto |
|
|||
Дикий Кот. =^.^= Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 3 Всего: 160 |
k0rvin, я смотрю ты Лисп(?) используешь строго по назначению - толстый троллинг. Ты бы хоть пояснял нам, императивным нищебродам, что там происходит. qweqwe, вот, смотри. И ещё один путает. Речь идёт о том, что со строгой типизацией нужно явно указывать свои намерения при приведении типов. Таким образом транслятор языка со строгой типизацией будет увереннее находить ошибки, которые транслятор языка с нестрогой типизацией будет "проглатывать", предполагая неявное приведение типов. Эти ошибки очень часто являются логическими ошибками. Чем раньше они будут отловлены, тем лучше. Логическую ошибку можно:
Это сообщение отредактировал(а) kemiisto - 24.4.2010, 20:15 -------------------- |
|||
|
||||
nerezus |
|
||||
Вселенский отказник Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 13 Всего: 43 |
|
||||
|
|||||
kemiisto |
|
|||
Дикий Кот. =^.^= Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 3 Всего: 160 |
k0rvin, кстати говоря, все Лиспы, вроде как, строго типизированные языки.
-------------------- |
|||
|
||||
qweqwe |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 55 Регистрация: 31.1.2007 Репутация: нет Всего: 0 |
нестрогая типизация, это когда компилятор видит, скажем сравнение строки и null, и генирирует такой код, который проверяет, пустая ли строка, и если она пустая - сравнение возвращает true, это крайне весело и остроумно, но к счастью - не ведет к ускорению программ (иначе ПэХаПэ был бы самым быстрым языком на свете) так точно, лиспы не пальцем деланы |
|||
|
||||
k0rvin |
|
||||||||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
Нет такого языка "лисп". а Common Lisp весьма императивный язык. в том числе.
Добавлено @ 21:27
все слова понятны. по-отдельности. вместе же они у Вас составляют кашу Добавлено @ 21:37
откуда такая уверенность? "диалектов лиспа больше, чем программ, написанных на нём". в Common Lisp типизация не сильно строгая: nil используется и как пустой список, и как "ложь", истиной является значение любого типа, кроме nil. ну и полиморфизм никто не отменял, благо CLOS предоставляет классы для всех встроенных типов, соответственно можно написать свои сколь угодно нестрогие функции =) в Scheme чуть по-строже, есть специальные булевы константы: #t и #f, пустой список '() не является "ложью", однако как и любое другое значение, отличное от #f, является "истиной" ну и конечно же и в том, и в другом списки и массивы гетерогенны однако типизация в CL и Scheme построже Сишной Это сообщение отредактировал(а) k0rvin - 24.4.2010, 22:08 -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||||||
|
|||||||||
k0rvin |
|
|||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
я разве писал, что нестрогая типизация приводит к ускорению программы? впрочем Вы правы, для статически типизированных языков разницы в производительности никакой. для динамически типизированных разница есть, ведь проверки типов придётся проводить в рантайме -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
|||
|
||||
qweqwe |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 55 Регистрация: 31.1.2007 Репутация: нет Всего: 0 |
проверки типов есть всегда, только в случае строгой типизации - проверка приведет к одному результату, а в случае не строгой - к другому |
|||
|
||||
nerezus |
|
||||
Вселенский отказник Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 13 Всего: 43 |
Тогда советую перечитывать до тех пор, пока полностью не поймете смысл, но не более 4 часов подряд. Добавлено через 4 минуты и 39 секунд
При динамической типизации(как правило она "в комплекте" с нестрогой типизацией, за исключением языков типа C) все равно приходится вести phpdoc/etc теги для работы автокомплита типов и документации, в итоге кода больше выходит... |
||||
|
|||||
qweqwe |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 55 Регистрация: 31.1.2007 Репутация: нет Всего: 0 |
у вас PHP головного мозга, уважаемый нестрогая и динамическая типизация - ортогональные вещи |
|||
|
||||
nerezus |
|
|||
Вселенский отказник Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 13 Всего: 43 |
qweqwe, а у вас ПГМ)
читаем первую часть моего поста, долго думаем. Специально же РАЗДЕЛИЛ эти понятия в сообщении. |
|||
|
||||
qweqwe |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 55 Регистрация: 31.1.2007 Репутация: нет Всего: 0 |
Православие Головного Мозга? Добавлено через 1 минуту и 57 секунд
зачем? мысль я понял, она не оригинальна, во первых, а во вторых, нестрогими могут быть и статические ЯП, а не только PHP |
|||
|
||||
k0rvin |
|
||||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
так значительно лучше
-----
что это? Добавлено через 1 минуту и 25 секунд
ну так он и написал "обычно, за исключением всяких С" =) -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||
|
|||||
qweqwe |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 55 Регистрация: 31.1.2007 Репутация: нет Всего: 0 |
||||
|
||||
k0rvin |
|
||||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
эээ... а типы тут при чём? или имеется в виду для конструкций вида (хз как в пхп, пишу в С-подобном синтаксисе):
? -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||
|
|||||
nerezus |
|
|||
Вселенский отказник Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 13 Всего: 43 |
Именно поэтому для PHP есть нормальные IDE, а для python - нету и не будет. |
|||
|
||||
k0rvin |
|
||||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
откуда такая уверенность? может гвидо разрешит питонистам что-то типа того же, что есть в пхп для этого. ну и да, что в пхп, что в пейтоне объектная модель -- уг =) -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||
|
|||||
nerezus |
|
||||||
Вселенский отказник Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 13 Всего: 43 |
PHP копирует джаву. На вскидку нету видимости пакетов, анонимных классов, перегрузки сравнения. Остальное вполне себе скопировано и переделано в динамику с кучей добавлений. |
||||||
|
|||||||
NLspieler |
|
||||||
Опытный Профиль Группа: Участник Сообщений: 619 Регистрация: 13.10.2008 Где: Берлин Репутация: нет Всего: 19 |
У php не строгая типизация?
В общем то это так, но нельзя забывать, что в php есть несколько операторов сравнения, а именно не только == , != , но и === , !== которые требуют строгое совпадение типа.
Таким образом, при необходимости можно пользоваться любым видом типизации. И при некотором опыте, никаких ошибок от этого больше не возникает. Правда, в php можно производить операции над разными типами данных, например
Возможно это и может привести к ошибках, но в моей практике никогда такого не было. С другой стороны это очень удобно. Можно сразу, без преобразования типов, приступить к вычислениям. Обращаемся к скрипту по get-ссылке test.php?a=10&b=0.5
Не смотря на то, что оба значения представляют собой строки, можно тут же использовать их в математических вычислениях. Удобно. Это сообщение отредактировал(а) NLspieler - 26.4.2010, 08:12 |
||||||
|
|||||||
k0rvin |
|
||||||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
Это факт, лучшие объектные модели в SmallTalk и CLOS Добавлено @ 12:30
ты не прав, это нифига не строгая типизация, при строгой === должно выбрасывать исключение на этапе компиляции при статической или в рантайме при динамической типизации Это сообщение отредактировал(а) k0rvin - 26.4.2010, 12:31 -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||||
|
|||||||
neutrino |
|
||||
Gothic soul Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Панацеи нет. Плохо везде использовать нестрогую типизацию. Но иногда она спасает делая код легкочитаемым => легкоподдерживаемым.
-------------------- The truth comes from within ... Покойся с миром, Vit |
||||
|
|||||
qweqwe |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 55 Регистрация: 31.1.2007 Репутация: нет Всего: 0 |
neutrino, вывод типов <> нестрогой типизации
|
|||
|
||||
Sentox |
|
|||
как то так Профиль Группа: Участник Сообщений: 392 Регистрация: 27.1.2009 Где: Зимбабве Репутация: нет Всего: 7 |
k0rvin,
Это один из способов типизации, да же мануал по этому говорит что проверка происходит на тип. Так же в PHP есть is_... int,string,array и instanceof что позволяет вручную делать проверку на типы. |
|||
|
||||
k0rvin |
|
|||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
Конечно спасибо, капитан, но что ты этим хотел сказать? -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
|||
|
||||
Sentox |
|
||||||||
как то так Профиль Группа: Участник Сообщений: 392 Регистрация: 27.1.2009 Где: Зимбабве Репутация: нет Всего: 7 |
Пожалуйста. Сказать хотел что оператор эквивалента проверяет и типы значений, что само по себе говорит о строгости типизации именно этого оператора, потому что кто то говорил
. И почему в обязательном порядке должно быть именно так
Всё остально привёл просто в информативном поле. Это сообщение отредактировал(а) Sentox - 30.5.2012, 14:19 |
||||||||
|
|||||||||
Logo |
|
|||
Опытный Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: нет Всего: 10 |
Хороший принцип нестрогой типизации есть в perl/perl6(все еще разрабатываемом)
Там в для базовых типов используется свой тип оператора. Таким образом происходит приведение типов, и программист всегда явно указывает, что он имел ввиду. Так, операции с числами/строками в perl
в perl5 из коробки вообще нет способов определить, является ли переменная строкой, или числом, да и это в подавляющем большинстве случаев и не нужно, т.к. операция определяется оператором. в perl6 пошли еще дальше, теперь многие операторы, допускающие двойное использование, начинаются с соответствующего символа. + числовой контекст ~ строковый контекст (~ теперь оператор конкатенации) ! логический контекст так, +| побитовое или для чисел, а ~| побитовое или для строк В результате операторов в perl 6 довольно много http://glyphic.s3.amazonaws.com/ozone/mark...A4%20300dpi.jpg |
|||
|
||||
k0rvin |
|
||||
Опытный Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
Нет, не говорит. Добавлено через 1 минуту и 19 секунд
Потому что строгая типизация не разрешает неявное приведение типов. -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||
|
|||||
Nikolja |
|
|||
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 24.2.2009 Где: Черкассы Репутация: нет Всего: -1 |
проголосовал за строгую типизацию
|
|||
|
||||
Karadul |
|
|||
Опытный Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: нет Всего: 1 |
В питоне
Написал по привычке из явы. Ошибка выяснилась у клиента, который запустил прогу с другими параметрами. Это только в тройке? Мое имхо: для маленьких программ лучше динамическая типизация (меньше мозги себе паришь), для больших - статическая (поддержка ide на порядки лучше, не начинает мутить от одной мысли сделать какой-то глобальный рефакторинг). Edit: плохо прочитал заголовок темы. Конечно же строгая, перл и неявные преобразования str<->unicode в питоне двойке не нужны. Это сообщение отредактировал(а) Karadul - 24.7.2012, 06:22 |
|||
|
||||
Karadul |
|
|||
Опытный Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: нет Всего: 1 |
Разрешил, но никто этим не пользуется. Срач здесь. |
|||
|
||||
ТарасАтавин |
|
|||
Опытный Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
В процедурной и алгоритмической парадигме лучше строгая явная, так как типы любых величин однозначно вытекают из задачи, а всякие приведения вроде округления действительного и присоединения к целому нулевой дробной части или не нужны вовсе, или чётко прописаны в алгоритме решения конкретной задачи, в объектно-ориентированной - смешанная: не строгая не явная для родственных классов и строгая явная для остальных, так как объект может быть экземпляром нескольких классов одновременно. Например амфибия - это автомобиль, или судно? А гидроплан - катер, или самолёт? А гигантский гидроэкраноплан Каспийский Монстр - самолёт, обычный корабль, или корабль на воздушной подушке? Здесь неясностей столько, что заранее определить классы всех объектов не всегда возможно, а привидения родственных классов предусмотреть не возможно почти ни когда.
-------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
Правила ведения Религиозных войн | |
|
1. Уважайте собеседника 2. Собеседник != враг 3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez" С уважением, Smartov. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Религиозные войны | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |