JS и его "недостатки"
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.123] |
|
|
Правила раздела:
| Страницы: (66) « Первая ... 45 46 [47] 48 49 ... 65 66 ( Перейти к последнему сообщению ) |
JS и его "недостатки"
|
Сообщ.
#691
,
|
|
|
|
Цитата Uncle_Bob @ А оно точно именно поэтому? А не может быть наоборот - сначала был параметр, а потом оказался ненужен, и чтобы не переписывать вызывающий код просто сделали параметры "зарезервированными"? И есть именно по вышеозвученной причине - невозможности расширить список аргументов в будущем при необходимости. |
|
Сообщ.
#692
,
|
|
|
|
korvin, ok. Будет что ответить - отвечу
А в каком языке это есть? Но ты, по сути, показал то, что в С++ принято называть "списками типов"... Добавлено Ну такой вот кривой дизайн у winAPI. Цитата А я говорю про возможность вызова функции с числом аргументов, отличным от прототипа. Функцию с ... ты можешь вызывать с числом аргументов, отличным от прототипа. Цитата В контексте обсуждения - нет, ибо они не могли рассчитывать на особенности Си, которые трудно реализовать из других "нативных" языков. |
|
Сообщ.
#693
,
|
|
|
|
Цитата D_KEY @ А в каком языке это есть? Сложно сказать, возможно в некоторых языках с зависимыми типами можно такое провернуть. Цитата D_KEY @ Но ты, по сути, показал то, что в С++ принято называть "списками типов"... Ну я не сомневался, что в C++ это назовут "фичей" и дадут какое-нибудь специальное название =) Хотя по версии TAPL это что-то вроде "гибкого кортежа" А как будет выглядеть объявление подобного типа List и значения list из моего примера? |
|
Сообщ.
#694
,
|
|
|
|
Цитата D_KEY @ Функцию с ... ты можешь вызывать с числом аргументов, отличным от прототипа. То есть в прототипе должно стоять ... То есть явно указано, что функция с переменным числом аргументов. И строго говоря, функция с переменным числом аргументов подразумевает вызов с "лишними" аргументами, которые между прочим именно соответствуют прототипу, а не отличаются от него. Если че - в js не надо ничего указывать дополнительно. Цитата trainer @ А не может быть наоборот Где-то наоборот, где-то (последним параметром) именно поэтому. |
|
Сообщ.
#695
,
|
|
|
|
D_KEY, кстати, а так тебя сильно возмутит:
Цитата function f( prm ) { ... } Цитата f( { a: 'param_1' ,b: { z = 100500 ,x = 'string' } ,c: 99999 }) ? |
|
Сообщ.
#696
,
|
|
|
|
Цитата korvin @ Ну я не сомневался, что в C++ это назовут "фичей" и дадут какое-нибудь специальное название =) Нет, это не фича, это просто прием. Цитата А как будет выглядеть объявление подобного типа List и значения list из моего примера? Что-нибудь в духе: ![]() ![]() template<typename A, typename B> struct List { List(A x, B y) : head(x), tail(y) { } A head; B tail; }; struct {} nil; template<typename A, typename B> List<A, B> cons(A a, B b) { return List<A, B>(a, b); } ![]() ![]() cons(1, cons("two", cons(false, nil))); Причем это в старом стандарте. Но подход Args... проще в использовании. Добавлено Цитата Uncle_Bob @ Если че - в js не надо ничего указывать дополнительно. Ага. И именно в этом и заключается недостаток(но для браузеров - нормально, об этом уже договорились). Добавлено Цитата Астарот @ D_KEY, кстати, а так тебя сильно возмутит Нет, все хорошо |
|
Сообщ.
#697
,
|
|
|
|
Цитата D_KEY @ А так:Нет, все хорошо ![]() ![]() var f = new Function('a', 'b', 'alert(a + b);'); |
|
Сообщ.
#698
,
|
|
|
|
Цитата D_KEY @ Нет, все хорошо ![]() То есть в одном случае тебе не нравится что могут попадать лишние параметры, а тут в обертке из {} сколько угодно - и все хорошо? |
|
Сообщ.
#699
,
|
|
|
|
Цитата fatalist @ Цитата D_KEY @ А так:Нет, все хорошо ![]() ![]() var f = new Function('a', 'b', 'alert(a + b);'); Да тоже нормально, если эти строки получены из вне(иначе лучше лямбды). Добавлено Цитата Астарот @ Цитата D_KEY @ Нет, все хорошо ![]() То есть в одном случае тебе не нравится что могут попадать лишние параметры, а тут в обертке из {} сколько угодно - и все хорошо? ![]() Ты передаешь указанным 1 параметром объект. Да, все хорошо. |
|
Сообщ.
#700
,
|
|
|
|
Цитата fatalist @ А так: Ну, это уже конструктор немного не то. Добавлено Цитата D_KEY @ Ты передаешь указанным 1 параметром объект. Да, все хорошо. Ну, я и говорю - один объект - хорошо, и пофиг что он сложен внутри, а тот же объект с ободранной оберткой, но несущий такие же данные - плохо |
|
Сообщ.
#701
,
|
|
|
|
Цитата D_KEY @ Ну это сродни eval, поэтому применяется как правило с большой осторожностью... Да тоже нормально, если эти строки получены из вне(иначе лучше лямбды). Добавлено Цитата Астарот @ Да я так привел для разнообразия Ну, это уже конструктор немного не то. Добавлено Цитата D_KEY @ И тебя уже в данном случае не волнует, что в явном виде нету нигде указания на то, что этот объект должен содержать и каких типов, так? Ты передаешь указанным 1 параметром объект. Да, все хорошо. |
|
Сообщ.
#702
,
|
|
|
|
Цитата Астарот @ а тот же объект с ободранной оберткой, но несущий такие же данные - плохо ![]() Это не "ободранный объект", а аргументы функции Добавлено Цитата fatalist @ И тебе уже в данном случае не волнует, что в явном виде нету нигде указания на то, что этот объект должен содержать и каких типов, так? Когда речь идет о языке с динамической типизацией - не волнует. |
|
Сообщ.
#703
,
|
|
|
|
Цитата D_KEY @ А почему тогда волнует, если эти все парметры будут разложены в аргументах? Когда речь идет о языке с динамической типизацией - не волнует. |
|
Сообщ.
#704
,
|
|
|
|
Цитата D_KEY @ Это не "ободранный объект", а аргументы функции ![]() Нет, это - формализм и игра словами. У тебя и с объектом нигде не написано что и каких типов нужно подавать, и никто не мешает подать тучу всего не нужного - но ВНЕЗАПНО это уже нормально, и только лишь потому что "договорились об объекте - подали объект" То, что никакой проблемы по сути этим не решили, а только выполнили формальности - не в счет, главное формально все пучком Ой, не могу |
|
Сообщ.
#705
,
|
|
|
|
Цитата fatalist @ Цитата D_KEY @ А почему тогда волнует, если эти все парметры будут разложены в аргументах?Когда речь идет о языке с динамической типизацией - не волнует. Это не параметры - это один параметр. Функция возведения в квадрат может иметь смысл для какого-то сложного объекта(например, у нас есть объект-пара, рассматриваемые как числитель и знаменатель рационального числа), но она не имеет смысла для, например, трех аргументов - аргумент у функции один. Добавлено Цитата Астарот @ Цитата D_KEY @ Это не "ободранный объект", а аргументы функции ![]() Нет, это - формализм и игра словами. У тебя и с объектом нигде не написано что и каких типов нужно подавать, и никто не мешает подать тучу всего не нужного - но ВНЕЗАПНО это уже нормально, и только лишь потому что "договорились об объекте - подали объект" То, что никакой проблемы по сути этим не решили, а только выполнили формальности - не в счет, главное формально все пучком Ой, не могу ![]() Мне тяжело объяснить тебе смысл типизации, я пока не нащупал на что можно опереться при объяснении в нашем случае... |