Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> строгая vs не строгая типизация, что лучше 
:(
    Опции темы
 
Какая типизация лучше?
не строгая [ 15 ]  [23.44%]
строгая [ 49 ]  [76.56%]
Всего проголосовавших: 64
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
qweqwe
Дата 25.4.2010, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 31.1.2007

Репутация: нет
Всего: 0



Цитата(nerezus @  25.4.2010,  20:39 Найти цитируемый пост)
ПГМ

Православие Головного Мозга? smile

Добавлено через 1 минуту и 57 секунд
Цитата(nerezus @  25.4.2010,  20:39 Найти цитируемый пост)
читаем первую часть моего поста, долго думаем. Специально же РАЗДЕЛИЛ эти понятия в сообщении. 

зачем? мысль я понял, она не оригинальна, во первых, а во вторых, нестрогими могут быть и статические ЯП, а не только PHP
PM MAIL   Вверх
k0rvin
Дата 25.4.2010, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



так значительно лучше

-----

Цитата(nerezus @ 25.4.2010,  16:26)
автокомплита типов


что это?

Добавлено через 1 минуту и 25 секунд
Цитата(qweqwe @ 25.4.2010,  20:43)
нестрогими могут быть и статические ЯП, а не только PHP

ну так он и написал "обычно, за исключением всяких С" =)


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
qweqwe
Дата 25.4.2010, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 31.1.2007

Репутация: нет
Всего: 0



Цитата(k0rvin @  25.4.2010,  21:13 Найти цитируемый пост)
что это?

он имел ввиду автокомплит в IDE, в php можно указывать аннотации, по которым IDE разберется что показывать в автокомплите smile 
PM MAIL   Вверх
k0rvin
Дата 25.4.2010, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(qweqwe @ 25.4.2010,  21:19)
Цитата(k0rvin @  25.4.2010,  21:13 Найти цитируемый пост)
что это?

он имел ввиду автокомплит в IDE, в php можно указывать аннотации, по которым IDE разберется что показывать в автокомплите smile

эээ... а типы тут при чём? или имеется в виду для конструкций вида (хз как в пхп, пишу в С-подобном синтаксисе):
Код

myObject->myMeth<нажимаем хоткей для автокомплита и имя метода дополняется>

?


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
nerezus
Дата 25.4.2010, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 13
Всего: 43



Цитата

myObject->myMeth<нажимаем хоткей для автокомплита и имя метода дополняется>
 Да. Т.е. IDE будет знать тип myObject, то сможет правильно дополнить.

Именно поэтому для PHP есть нормальные IDE, а для python - нету и не будет.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
k0rvin
Дата 26.4.2010, 06:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(nerezus @ 25.4.2010,  23:52)
Цитата

myObject->myMeth<нажимаем хоткей для автокомплита и имя метода дополняется>
 Да. Т.е. IDE будет знать тип myObject, то сможет правильно дополнить.

Именно поэтому для PHP есть нормальные IDE, а для python - нету и не будет.

откуда такая уверенность? может гвидо разрешит питонистам что-то типа того же, что есть в пхп для этого.

ну и да, что в пхп, что в пейтоне объектная модель -- уг =)


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
nerezus
Дата 26.4.2010, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 13
Всего: 43



Цитата

откуда такая уверенность?
 В невозможности определить тип в питоне в IDE, т.к. он нигде не указан.

Цитата

может гвидо разрешит питонистам что-то типа того же, что есть в пхп для этого.
 Когда разрешит - тогда и поговорим. Сейчас этого нету.

Цитата

ну и да, что в пхп, что в пейтоне объектная модель -- уг =)
 Это твои эротические фантазии ;)
PHP копирует джаву. На вскидку нету видимости пакетов, анонимных классов, перегрузки сравнения. Остальное вполне себе скопировано и переделано в динамику с кучей добавлений.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
NLspieler
Дата 26.4.2010, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: нет
Всего: 19



У php не строгая типизация?
В общем то это так, но нельзя забывать, что в php есть несколько операторов сравнения, а именно
не только == , != , 
но и === , !==   которые требуют строгое совпадение типа.

Код

if ('' === FALSE) 
{
    echo 'TRUE' ;
}
else 
{
    echo 'FALSE' ;
}
//Выведет FALSE
 
if ('' ==   FALSE) 
{
    echo 'TRUE' ;
}
else 
{
    echo 'FALSE' ;
}
//Выведет TRUE ;


Таким образом, при необходимости можно пользоваться любым видом типизации. И при некотором опыте, никаких ошибок 
от этого больше не возникает.

Правда, в php можно производить операции над разными типами данных,
например

Код

echo 10 / "0.5" ;  //Деление целого числа на строку, которая преобразуется в double, результат 20

Возможно это и может привести к ошибках, но в моей практике никогда такого не было.

С другой стороны это очень удобно. Можно сразу, без преобразования типов, приступить к вычислениям. 
Обращаемся к скрипту по get-ссылке test.php?a=10&b=0.5
Код

<?
echo $_GET['a'] / $_GET['b'] ; //Результат опять же 20
?>

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




Это сообщение отредактировал(а) NLspieler - 26.4.2010, 08:12
PM MAIL   Вверх
k0rvin
Дата 26.4.2010, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(nerezus @ 26.4.2010,  07:09)
Это твои эротические фантазии ;)
PHP копирует джаву. На вскидку нету видимости пакетов, анонимных классов, перегрузки сравнения. Остальное вполне себе скопировано и переделано в динамику с кучей добавлений.

Это факт, лучшие объектные модели в SmallTalk и CLOS

Добавлено @ 12:30
Цитата(NLspieler @ 26.4.2010,  07:55)
У php не строгая типизация?
В общем то это так, но нельзя забывать, что в php есть несколько операторов сравнения, а именно
не только == , != , 
но и === , !==   которые требуют строгое совпадение типа.

Код

if ('' === FALSE) 
{
    echo 'TRUE' ;
}
else 
{
    echo 'FALSE' ;
}
//Выведет FALSE
 
if ('' ==   FALSE) 
{
    echo 'TRUE' ;
}
else 
{
    echo 'FALSE' ;
}
//Выведет TRUE ;


Таким образом, при необходимости можно пользоваться любым видом типизации. И при некотором опыте, никаких ошибок 
от этого больше не возникает.

ты не прав, это нифига не строгая типизация, при строгой === должно выбрасывать исключение на этапе компиляции при статической или в рантайме при динамической типизации

Это сообщение отредактировал(а) k0rvin - 26.4.2010, 12:31


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
neutrino
Дата 28.4.2010, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Панацеи нет. Плохо везде использовать нестрогую типизацию. Но иногда она спасает делая код легкочитаемым => легкоподдерживаемым. 
Код

        private static void DefineAcceptingStates(Dictionary<State, HashSet<State>> dStates)
        {
            foreach (var kvp in dStates)
            {
                foreach (State state in kvp.Value)
                {
                    if (state.IsAccepting)
                    {
                        kvp.Key.IsAccepting = true;
                        break;
                    }
                }
            }
        }



Код

        private static void DefineAcceptingStates(Dictionary<State, HashSet<State>> dStates)
        {
            foreach (KeyValuePair<State, HashSet<State>> kvp in dStates)
            {
                foreach (State state in kvp.Value)
                {
                    if (state.IsAccepting)
                    {
                        kvp.Key.IsAccepting = true;
                        break;
                    }
                }
            }
        }






--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
qweqwe
Дата 29.4.2010, 05:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 31.1.2007

Репутация: нет
Всего: 0



neutrino, вывод типов <> нестрогой типизации
PM MAIL   Вверх
Sentox
Дата 30.5.2012, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

Репутация: нет
Всего: 7



k0rvin
Цитата

ты не прав, это нифига не строгая типизация, при строгой === должно выбрасывать исключение на этапе компиляции при статической или в рантайме при динамической типизации


Это один из способов типизации, да же мануал по этому говорит что проверка происходит на тип.
Так же в PHP есть is_... int,string,array и instanceof что позволяет вручную делать проверку на типы.


PM MAIL   Вверх
k0rvin
Дата 30.5.2012, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Sentox @ 30.5.2012,  11:30)
Это один из способов типизации, да же мануал по этому говорит что проверка происходит на тип.
Так же в PHP есть is_... int,string,array и instanceof что позволяет вручную делать проверку на типы.

Конечно спасибо, капитан, но что ты этим хотел сказать?


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Sentox
Дата 30.5.2012, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

Репутация: нет
Всего: 7



Цитата(k0rvin @ 30.5.2012,  13:53)
Цитата(Sentox @ 30.5.2012,  11:30)
Это один из способов типизации, да же мануал по этому говорит что проверка происходит на тип.
Так же в PHP есть is_... int,string,array и instanceof что позволяет вручную делать проверку на типы.

Конечно спасибо, капитан, но что ты этим хотел сказать?

Пожалуйста.
Сказать хотел что оператор эквивалента проверяет и типы значений, что само по себе говорит о строгости типизации  именно этого оператора, потому что кто то говорил
Цитата

ты не прав, это нифига не строгая типизация, при строгой === должно выбрасывать исключение на этапе компиляции при статической или в рантайме при динамической типизации


И почему в обязательном порядке должно быть именно так
Цитата

должно выбрасывать исключение на этапе компиляции при статической или в рантайме при динамической типизации

Всё остально привёл просто в информативном поле.

Это сообщение отредактировал(а) Sentox - 30.5.2012, 14:19
PM MAIL   Вверх
Logo
Дата 31.5.2012, 01:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Хороший принцип нестрогой типизации есть в perl/perl6(все еще разрабатываемом)
Там в для базовых типов используется свой тип оператора.
Таким образом происходит приведение типов, и программист всегда явно указывает, что он имел ввиду.
Так, операции с числами/строками в perl 
Код

+    .    # сложение/конкатенация
<=>  cmp  # сравнение
==   eq   # равно (equal)
>    gt   # больше (greater to)
>=   ge   # больше или равно (greater or equal)


в perl5 из коробки вообще нет способов определить, является ли переменная строкой, или числом, да и это в подавляющем большинстве случаев и не нужно, т.к. операция определяется оператором.

в perl6 пошли еще дальше, теперь многие операторы, допускающие двойное использование, начинаются с соответствующего символа.
+ числовой контекст
~ строковый контекст (~ теперь оператор конкатенации)
! логический контекст

так, +| побитовое или для чисел, а ~| побитовое или для строк
В результате операторов в perl 6 довольно много http://glyphic.s3.amazonaws.com/ozone/mark...A4%20300dpi.jpg


PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.2247 ]   [ Использовано запросов: 24 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.