JS и его "недостатки"
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.123] |
|
|
Правила раздела:
| Страницы: (66) « Первая ... 23 24 [25] 26 27 ... 65 66 ( Перейти к последнему сообщению ) |
JS и его "недостатки"
|
Сообщ.
#361
,
|
|
|
|
Цитата D_KEY @ Клиент может не передать тебе нужные аргументы, или передать лишние, в надежде на то, что ты их как-то обработаешь. Или тупо опечататься и вместо . поставить , в числе с плавающей точкой И чё? Прикинь - те скрипты, что получают - это тоже клиент, вот неожиданность, правда? Или ты хочешь сказать что один и тот же клиент пишут 100500 разных программистов? |
|
Сообщ.
#362
,
|
|
|
|
Цитата D_KEY @ Клиент может не передать тебе нужные аргументы, или передать лишние, в надежде на то, что ты их как-то обработаешь. Или тупо опечататься и вместо . поставить , в числе с плавающей точкой ![]() И что? Как это соотносится с тем, что функция может принимать произвольное количество параметров? Тебе что, кто-то мешает при желании обработать неправильное поведение клиента? Или твоя реализация как-то от него защищает? |
|
Сообщ.
#363
,
|
|
|
|
|
Сообщ.
#364
,
|
|
|
|
Цитата MyNameIsIgor @ Мы тут что Мы? Ты себя посчитал что ли? Зря, тебе диагноз уже поставлен |
|
Сообщ.
#365
,
|
|
|
|
Цитата Serafim @ Прикинь - те скрипты, что получают - это тоже клиент, вот неожиданность, правда? Поясни свою фразу. Какие те скрипты и что они получают? |
|
Сообщ.
#366
,
|
|
|
|
Цитата Астарот @ Зря, тебе диагноз уже поставлен Впервые вижу медсестру, смеющую что-то там лепетать про диагноз... |
|
Сообщ.
#367
,
|
|
|
|
Цитата Астарот @ Или твоя реализация как-то от него защищает? Да, защищает. А если мне нужна функция с переменным числом аргументов, то об этом будет явно сказано и об этом узнает клиент, а код будет самодокументирован. Если же переменное число аргументов мне не нужно, то я получу гарантированные аргументы, а интерпретатор сможет указать клиенту на ошибку. |
|
Сообщ.
#368
,
|
|
|
|
Цитата D_KEY @ Да, защищает Каким образом? Цитата D_KEY @ А если мне нужна функция с переменным числом аргументов, то об этом будет явно сказано и об этом узнает клиент, а код будет самодокументирован. Каким образом он об этом узнает-то? Демонстрируй уже свои слова в псевдокоде-то! Что-то сдается мне разница будет минимальной, если она вообще будет, а уж про удобство я не говорю.Цитата D_KEY @ Если же переменное число аргументов мне не нужно, то я получу гарантированные аргументы, а интерпретатор сможет указать клиенту на ошибку. Датычо! Хочешь сказать, что если объявил function f(a, b) то это как-то гарантирует тебе вызов f как f(1,2), а не f(1,2,3) или f(1) или вообще f()? |
|
Сообщ.
#369
,
|
|
|
|
Цитата Астарот @ Датычо! Хочешь сказать, что если объявил function f(a, b) то это как-то гарантирует тебе вызов f как f(1,2), а не f(1,2,3) или f(1) или вообще f()? ВНЕЗАПНО! В нормальных языках - да ![]() ![]() def foo(a, b): print(a) print(b) foo("s") ![]() ![]() Traceback (most recent call last): File "prog.py", line 5, in <module> foo("s") TypeError: foo() takes exactly 2 arguments (1 given) А в мире грибников свои фирменные костыли - это да, пичалька... |
|
Сообщ.
#370
,
|
|
|
|
Цитата Астарот @ Я наоборот нахожу это зверски удобным - если это интерфейсная функция, то мне не нужно заботится о том, что какой-то вандал впихнет в нее лишний параметр, я об этом даже не узнаю, мне не придется заморачиваться вопросами того, через какую жопу может быть вызван мой метод. Вообще-то язык программирования должен бороться с вандалами а не предоставлять костыли, чтобы с ними сожительствовать. Когда я вижу функции f() (функция с 0 параметров) и g(*args) (функция с любым числом параметров) я четко понимаю, какое количество параметров может передаваться в них. Когда я вижу f() и g() в JS - я ничего не понимаю, ведь валидны и такое: g() и даже вот такое: f(1, 2, 3). Хотя семантически такие вызовы - бессмысленны. |
|
Сообщ.
#371
,
|
|
|
|
Цитата MyNameIsIgor @ ВНЕЗАПНО! В нормальных языках - да ВНЕЗАПНО ты опять не осилил возможность сделать в js так же без всяких проблем и в том виде в котором тебе удобно. Прекращай увлекаться грибами, почитай лучше букварь что ли. |
|
Сообщ.
#372
,
|
|
|
|
Цитата Астарот @ ты опять не осилил возможность сделать в js так же без всяких проблем Ну, да, ведь типизация создана для того, что аргументы ручками проверять, ага |
|
Сообщ.
#373
,
|
|
|
|
Цитата Мяут-Настоящий @ Вообще-то язык программирования должен бороться с вандалами а не предоставлять костыли, чтобы с ними сожительствовать. Кому должен-то? Тебе? А на основании чего, позволь спросить? Потому что тебе так захотелось? Цитата Мяут-Настоящий @ Когда я вижу функции f() (функция с 0 параметров) и g(*args) (функция с любым числом параметров) я четко понимаю, какое количество параметров может передаваться в них. Когда я вижу f() и g() в JS - я ничего не понимаю, ведь валидны и такое: g() и даже вот такое: f(1, 2, 3). Хотя семантически такие вызовы - бессмысленны. То есть я тебе пример из jquery приводил так, что б ты его пропустил? Или как? Ну, ок, давай посмотрим на твои "доводы"... Цитата Мяут-Настоящий @ Когда я вижу функции f() (функция с 0 параметров) и g(*args) (функция с любым числом параметров) я четко понимаю, какое количество параметров может передаваться в них. Где ты видишь четко, а? Все, что ты видишь - это есть параметры или нет. Если есть - ты даже не знаешь сколько их. Любое число Полезное знание, даааа... Настолько полезное, что нужно придумывать костыли дробящие одно и то же на два отдельных синтаксиса. При этом ты лишаешься возможности, как я понял, сделать функцию, которая работает и с параметрами и без Афигенское удобство, доложу я тебе! ![]() Цитата Мяут-Настоящий @ Хотя семантически такие вызовы - бессмысленны. Повторить про функции которые с одним параметром возвращают значение, а с двумя - устанавливают? Или нафантазировать такую, которая с одним параметром возвращает значение, с двумя - устанавливает, а без параметров вообще возвращает текст со справкой по использованию себя? Добавлено Цитата MyNameIsIgor @ Цитата Астарот @ ты опять не осилил возможность сделать в js так же без всяких проблем Ну, да, ведь типизация создана для того, что аргументы ручками проверять, ага ![]() Забористая у тебя трава - опять свою типизацию вспомнил Иди уже что ли в раздел с уютненьким, не позорься тут, а то ей богу неловко - взрослый парень, а такую херь несешь, что просто караул. |
|
Сообщ.
#374
,
|
|
|
|
В продолжение предыдущего поста:
Вот есть две такие функции, одна читает какое-то свойство из dom и возвращает его: ![]() ![]() function getSomeThings() { return someObject.someProperty; } Вторая считает сумму всех переданных в нее аргументов: ![]() ![]() function sumArguments() { s = 0; for(var x in arguments) s += x; return s; } Какой смысл имеют вызовы getSomeThings(1, 2), sumArguments() и sumArguments(1, "x", 0.5, true)? ![]() P.S. Это феерично (из книги по JS) ![]() ![]() function check(args) { var actual = args.length; var expected = args.callee.length; if(actual != expected) throw new Error("Wrong call: given " + actual + " args, expected" + expected); } function f(x, y, z) { check(arguments); return x+y+z; } Почему нельзя реализовать это на уровне языка - загадка. |
|
Сообщ.
#375
,
|
|
|
|
Цитата D_KEY @ Суть примера в том, чтобы устраивать танцы с arguments вместо того, чтобы просто проверить, пришла переменная или нет... по мне, так сомнительное преимущество...Суть примера в том, что такой механизм работы с аргуметами избавляет язык от разрешения на вызов функции не с теми параметрами, на которые она была рассчитана: Цитата D_KEY @ Мы тоже самое можем сделать (я это продемонстрировал), но это совершенно не нужно, когда надо иметь аргумент, либо его отсутствие...Нет, я могу сказать, что моя функция принимает произвольное число аргументов и в этом случае аргументы будут мне поданы в виде кортежа. Это покрывает твой пример на тему того, что разные клиенты(браузеры) по разному работают с функцией. Ты что-то конкретное сказать хотел или так, на перекур зашел? Я слушаю... |