Указывать типы переменных или PHP-style

Указывать типы переменных
15
Нейтральная
сторона
2
PHP-style
5
Прежде чем писать комментарии или выбрать сторону вы должны авторизироваться!

23-12-2011 23:44 +2

Холивар на тему «тип задан в переменной vs тип определяется значением»?

Полиморфные кортежи — это круто, но возникают проблемы с быстродействием интерпретатора, потому что требуются лишние проверки. Да и не всегда надо на ходу менять тип значения. Если длина объекта — это число, то вряд ли нам понадобится менять его на строку или что-то другое.

В крайнем случае переменная может быть типа Variant как в Дельфи: запись с вариантными полями, первое поле указывает на тип. Вроде и переменная типизированная, и её тип может меняться.

1 комментарий
cherepets 23-12-2011 23:50 0

opera.rulez, Да. Об этом.
Просто я в добровольно-принудительном порядке отправился от универа на еще одну косячную работу, где надо под памятником Кириллу и Мефодию писать на пхп за копейки.

По причинам проектирования базы "умным человеком" мне нужно использовать одну переменную то как строку, то как число. И как же меня заебло, что вместо того чтобы явно писать тип, надо пытаться угадывать реакцию интерпретатора.

24-12-2011 01:06 +1

Пишу на PHP, но всегда подстраховываюсь, используя оператор тождественного сравнения (=== вместо ==).

0 комментариев
24-12-2011 03:51 0

пхп-стайл хорош для быдлокодеров - всё работает как ни напишешь.
но с ростом проекта растут и проблемы / неудобства связанные с сабжем. не говоря уже про ООП.

3 комментария
Slimmer 24-12-2011 12:50 +1

fhfh, всё работает как ни напишешь
да ну...
это удобно, только если ты к этому привык и по-другому никогда не писал.
Как может быть удобно, когда ты каждый раз не знаешь, что делаешь - сложение или конкатенацию. Каждый раз делать to_string или to_number тоже, по-моему не очень удобно...

cherepets 24-12-2011 12:55 0

Slimmer, Подтверждаю. Не всегда удобно.

Пытаюсь выбрать третий символ из строки с числом (типа 0001010101), означающей набор прав. А оно внезапно может нули из начала урезать, ибо в числе они не нужны и вместо 0 я получаю 1.

Полная херня.

Slimmer 24-12-2011 13:08 0

cherepets, ну да, вроде логически просто, а отлаживаешь на каждом шаге.

24-12-2011 13:50 0

Я опять почувствовал себя ничего не знающим говном, но все же побыдлю немного здесь. Сабж: переменная должна иметь тип. Иначе хуйня. Я даже в Си никогда не использовал "Int по умолчанию"

1 комментарий
NightmareZ 29-01-2012 20:44 0

Razor, Ну иногда можно тип явно не указывать и он будет выводиться из контекста, например. При этом, само собой, будет строгая типизация.

Это я просто вариант привёл.

26-01-2017 15:43 0

Сайт автора платных курсов по PHP:

myrusakov.ru/search.html?query[]=foo&log...

srs.myrusakov.ru/subscribe?email[]=foo&n...

Динамическая типизация и PHP-style во всей красе.

1 комментарий
opera.rulez 27-01-2017 07:11 0

opera.rulez, Офтопик. А это уже не по динамической типизации, а просто рекорд: 71 ворнинг на одну страницу.

myrusakov.ru/search.html?query=SELECT *

24-12-2011 04:15 +2

Очень зависит от ЯП, используемой парадигмы и здравого смысла.

Например, глупо бы было в шарпе писать так
MySomeLongNameClass obj = new MySomeLongNameClass();
когда можно
var obj = new MySomeLongNameClass();

с другой стороны глупо бы было писать в нём же так
var obj = SomeMethod();
вместо
MySomeLongNameClass obj = SomeMethod();
потому что в первом случае с первого взляда не видно, какого типа переменная obj.

Но при этом в окамле нет смысла писать так
let f x: int = x + x
вместо
let f x = x + x

А вот в плюсах проще написать
for (auto it = vec.begin(); it != vec.end(); ++it)
чем
for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++t)
и не плодить тайпдефы для одного цикла... хоть это и не кошерно.

Вобщем, я в нейтрал.

0 комментариев
26-01-2017 15:57 +2

Чет вроде заголовок я сделал про указание типов в коде, а аргументы привел против динамической типизации. Тупо как-то.
Очевидно что в случаях когда можно писать меньше - нужно писать меньше, но типизация всё равно нужна.

4 комментария
opera.rulez 26-01-2017 16:06 0

cherepets, Кстати, некоторые сишники не любят тайпдефы и любят при каждом применении указывать слово struct, если тип описывает структуру. Т. е. вместо такого:
typedef struct {int foo; int bar;} baz;
baz x;


Пишут такое:
struct baz {int foo; int bar;};
struct baz x;


Зачем?

fhfh 26-01-2017 20:42 0

opera.rulez, на всякий случай наверное.

BerkutOi 26-01-2017 20:47 +1

opera.rulez, ну зато в любом месте кода понятно что baz это структура, в первом варианте придется искать тайпдеф.
Я на си не пишу, но наверное тоже б так делал

Jotun 26-01-2017 21:56 +1

BerkutOi, ctrl+f12 в VS или ctrl+ЛКМ в Resharper для перехода к тайпдефу. К слову, при наведении он и так появляется в тултипе.