Здравствуйте, StandAlone, Вы писали:
SA>И в случае с JS этот самый радиус приближается к радиусу Шварцшильда! Чисто потому что сам язык, да-да, сам вот этот вот замечательный язык такой же, спроектирован в виде бутылки Клейна и позволяет появление мертворожденных уродцев типа Q.
Аналоги Q я видел вне JS задолго до появления их в JS. Как то так
SA>В черную дыру которого уже улетел не один миллион человеко-часов дебага и багофикса.
В многопоточном коде улетает не меньшее количество кода
Здравствуйте, neFormal, Вы писали:
F>раскрой тему. что в твоём понимании "кратко" и что "сокращённо"?
Кратко — короткий, простой, понятный код. Сокращенно — это уже зипование, когда начинают экономить на синтаксисе.
I>>Здесь большое противоречие.
F>никакого. в остальных языках хотя бы типизация строгая.
Здравствуйте, neFormal, Вы писали:
F>ты вот думаешь первым делом "не учёл", потому что у тебя нет выбора. ты обречён копаться в кривой поделке без возможности её выкинуть. такая же фигня с 1с-никами
Да легко выбрасывается, только все конкуренты сдохли. Это значит, что крутые герои на поверку оказались хуже говна, потому что не могут его сбороть.
F>человек из другой сферы может выбирать, на чём ему ваять нетленку. и тут уже бывает, что языки выстраиваются в очередь, а кодер вальяжно выбирает их по фичам и удобству. но вот если ему придётся влезть немного в веб-гуй, то отсутствие выбора у такого человека вызовет ожидаемое воспламенение.
Выбор вообще говоря есть.
F>исходя их этого становится понятно, почему вы тут оправдываете откровенно ущербный js, а другие восхищаются вашей упёртостью.
Как думаешь, кто даёт взятку людям, что бы они тащили JS во все области ?
Все такие умные, у всех JS — говно, и каким то чудом это говно проникает вообще везди и очень успешно
У тебя есть объяснение ?
Здравствуйте, anonymous, Вы писали:
A>В Perl аргументы функции находятся в переменной-массиве @_, соответственно, доступ к первому будет выглядеть как $_[0]. А $_ — это специальная переменная, не имеющая отношения к аргументам. То есть map внутри выглядит как-то так:
Здравствуйте, Ikemefula, Вы писали:
F>>раскрой тему. что в твоём понимании "кратко" и что "сокращённо"? I>Кратко — короткий, простой, понятный код. Сокращенно — это уже зипование, когда начинают экономить на синтаксисе.
примеры?
вот короткий код:
map(str, [1,2,3])
какой тут сокращённый будет?
F>>никакого. в остальных языках хотя бы типизация строгая. I>И соответственно перформанс никакой.
это что же, у нас у js перфоманс появился?
нет, правда?
Здравствуйте, Ikemefula, Вы писали:
F>>ты вот думаешь первым делом "не учёл", потому что у тебя нет выбора. ты обречён копаться в кривой поделке без возможности её выкинуть. такая же фигня с 1с-никами I>Да легко выбрасывается, только все конкуренты сдохли.
"все" — это один и тот полудохлый vbs?
I>Это значит, что крутые герои на поверку оказались хуже говна, потому что не могут его сбороть.
никому не было нужно. веб в таком виде взлетел без разумного анализа, на том, что было.
I>Выбор вообще говоря есть.
js или ts?
I>Как думаешь, кто даёт взятку людям, что бы они тащили JS во все области ?
мозг. перестаёт утомляться, выбрасывает эндорфины.
I>Все такие умные, у всех JS — говно, и каким то чудом это говно проникает вообще везди и очень успешно I>У тебя есть объяснение ?
"везде" — это где? кроме скриптинга html js можно встретить разве что в виде ноды. да и ту выпинывают все, кому не лень.
Второе вообще не функция, а блок кода — отдельная сущность, в нём нет @_ (на самом деле есть, но с уровня выше). Но даже если подсунуть туда функцию, @_ будет пуст, потому что в колбек значение передаётся именно через специальную переменную $_. Поэтому и работают конструкции типа map chr, 42, многие встроенные функции по умолчанию используют $_, если их вызвали без параметра.
F>и тем не менее даже в перле это сделано классически, а не как в js.
Уж точно не классически. Передай в map функцию, которая ожидает именно аргумент, и ничего не заработает.
Здравствуйте, anonymous, Вы писали:
A>Он не будет проскальзывать, если ты не будешь подсовывать ему функцию, принимающую более одного параметра. Вот мне не понятно: ты ожидаешь, что map будет последовательно вызывать функцию с одним параметром, и при этом передаёшь в map функцию, принимающую 2 аргумента. Только мне одному кажется, что это не нормально?
Я ожидаю, что язык в такой ситуации покажет мне синтаксическую ошибку. Но в случае с js я прошу слишком много.
A>>>Нет, не при чём, это ж просто инструмент. Когда ты режешь себе палец, это нож виноват или ты чего-то не учёл? S>>Если у ножа нет скользкая ручка, плавно переходящая в лезвие? Виноват я буду лишь в том что вообще взял этот нож. A>Не надо превращать мою иллюстрацию в аргумент.
С чего вдруг? Вы решили перейти на аналогии, а мне "низзя"? Моя аналогия вполне иллюстрирует мою точку зрения.
S>>>А язык, который молча позволил совершить эти две ошибки совершенно ни при чём? A>Не при чём. Я ж ответил уже.
Фанатично.
Здравствуйте, Somescout, Вы писали:
S>Здравствуйте, anonymous, Вы писали:
A>>Он не будет проскальзывать, если ты не будешь подсовывать ему функцию, принимающую более одного параметра. Вот мне не понятно: ты ожидаешь, что map будет последовательно вызывать функцию с одним параметром, и при этом передаёшь в map функцию, принимающую 2 аргумента. Только мне одному кажется, что это не нормально? S>Я ожидаю, что язык в такой ситуации покажет мне синтаксическую ошибку. Но в случае с js я прошу слишком много.
TS подскажет
Кстати https://www.typescriptlang.org/docs/handbook/functions.html
function buildName(firstName: string, lastName?: string) {
if (lastName)
return firstName + " " + lastName;
else
return firstName;
}
let result1 = buildName("Bob"); // works correctly now
let result2 = buildName("Bob", "Adams", "Sr."); // error, too many parameters
let result3 = buildName("Bob", "Adams"); // ah, just right
Воспринимай остальные параметры как необязательные.
Comparing two functions
While comparing primitive types and object types is relatively straightforward, the question of what kinds of functions should be considered compatible is a bit more involved. Let’s start with a basic example of two functions that differ only in their parameter lists:
let x = (a: number) => 0;
let y = (b: number, s: string) => 0;
y = x; // OK
x = y; // Error
To check if x is assignable to y, we first look at the parameter list. Each parameter in x must have a corresponding parameter in y with a compatible type. Note that the names of the parameters are not considered, only their types. In this case, every parameter of x has a corresponding compatible parameter in y, so the assignment is allowed.
The second assignment is an error, because y has a required second parameter that ‘x’ does not have, so the assignment is disallowed.
You may be wondering why we allow ‘discarding’ parameters like in the example y = x. The reason for this assignment to be allowed is that ignoring extra function parameters is actually quite common in JavaScript. For example, Array#forEach provides three parameters to the callback function: the array element, its index, and the containing array. Nevertheless, it’s very useful to provide a callback that only uses the first parameter:
let items = [1, 2, 3];
// Don't force these extra parameters
items.forEach((item, index, array) => console.log(item));
// Should be OK!
items.forEach(item => console.log(item));
Now let’s look at how return types are treated, using two functions that differ only by their return type:
let x = () => ({name: "Alice"});
let y = () => ({name: "Alice", location: "Seattle"});
x = y; // OK
y = x; // Error because x() lacks a location property
The type system enforces that the source function’s return type be a subtype of the target type’s return type.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S>Здравствуйте, Somescout, Вы писали:
S>>Здравствуйте, anonymous, Вы писали:
A>>>Он не будет проскальзывать, если ты не будешь подсовывать ему функцию, принимающую более одного параметра. Вот мне не понятно: ты ожидаешь, что map будет последовательно вызывать функцию с одним параметром, и при этом передаёшь в map функцию, принимающую 2 аргумента. Только мне одному кажется, что это не нормально? S>>Я ожидаю, что язык в такой ситуации покажет мне синтаксическую ошибку. Но в случае с js я прошу слишком много. S> TS подскажет
Разве? Мне нравится TS, но конкретно в этом случае ошибки скорее всего не будет — ибо совместимость. Если только самому переопределить описание map, то да, будет нормальная проверка.
Здравствуйте, Somescout, Вы писали:
S>Здравствуйте, Serginio1, Вы писали:
S>>Здравствуйте, Somescout, Вы писали:
S>>>Здравствуйте, anonymous, Вы писали:
A>>>>Он не будет проскальзывать, если ты не будешь подсовывать ему функцию, принимающую более одного параметра. Вот мне не понятно: ты ожидаешь, что map будет последовательно вызывать функцию с одним параметром, и при этом передаёшь в map функцию, принимающую 2 аргумента. Только мне одному кажется, что это не нормально? S>>>Я ожидаю, что язык в такой ситуации покажет мне синтаксическую ошибку. Но в случае с js я прошу слишком много. S>> TS подскажет S>Разве? Мне нравится TS, но конкретно в этом случае ошибки скорее всего не будет — ибо совместимость. Если только самому переопределить описание map, то да, будет нормальная проверка.
Подскажет, что параметры опциональны пометив как x? Сейчас проверю
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали: S>>Разве? Мне нравится TS, но конкретно в этом случае ошибки скорее всего не будет — ибо совместимость. Если только самому переопределить описание map, то да, будет нормальная проверка. S> Подскажет, что параметры опциональны пометив как x? Сейчас проверю
Для
* Performs the specified action for each element in an array.
* @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array.
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
*/
forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void;
Но вот для map куча перегрузок
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
*/
map<U>(this: [T, T, T, T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U, U, U, U];
/**
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
*/
map<U>(this: [T, T, T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U, U, U];
/**
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
*/
map<U>(this: [T, T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U, U];
/**
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
*/
map<U>(this: [T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U];
/**
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
*/
map<U>(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[];
/**
То есть для калбеков мы можем опускать параметры если их не используем
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, anonymous, Вы писали:
A>Не важно, функцию, которая возвращает функцию. Ну, например: A>map (+) [1,2,3]
Что например? Это абсолютно нормальный код с очевидным результатом, например:
#zipWith ($) (map (+) [1,2,3]) [1, 2, 3]
[2,4,6]
Эквивалент на JS порождает очередной wtf:
#[10, 20, 30].map(function(a, b){ return a + b; })
[ 10, 21, 32 ]
N>>Perl — плохой язык. Даже хуже чем JS. A>Не важно, map там работает «ожидаемым» образом.
В perl-е все работает не "ожидаемым" способом поэтому его просто надо забыть, как страшный сон, что собственно и произошло.
A>В JS то же самое, просто не забудь предать функцию, принимающую ровно один аргумент.
A если забыл, то сам себе злой буратин! That's the spirit!
Здравствуйте, novitk, Вы писали:
A>>Не важно, функцию, которая возвращает функцию. Ну, например: A>>map (+) [1,2,3] N>Что например? Это абсолютно нормальный код с очевидным результатом, например: N>#zipWith ($) (map (+) [1,2,3]) [1, 2, 3] N>[2,4,6]
Нет. Именно как я написал:
map (+) [1,2,3]
N>>>Perl — плохой язык. Даже хуже чем JS. A>>Не важно, map там работает «ожидаемым» образом. N>В perl-е все работает не "ожидаемым" способом поэтому его просто надо забыть, как страшный сон, что собственно и произошло.
Я же сказал, не важно. Ты пытаешься сменить тему.
A>>В JS то же самое, просто не забудь предать функцию, принимающую ровно один аргумент. N>A если забыл, то сам себе злой буратин! That's the spirit!
Да. Удивительно, правда? Есть языки, которые не контролируют каждый твой шаг.
Здравствуйте, Somescout, Вы писали:
A>>Он не будет проскальзывать, если ты не будешь подсовывать ему функцию, принимающую более одного параметра. Вот мне не понятно: ты ожидаешь, что map будет последовательно вызывать функцию с одним параметром, и при этом передаёшь в map функцию, принимающую 2 аргумента. Только мне одному кажется, что это не нормально? S>Я ожидаю, что язык в такой ситуации покажет мне синтаксическую ошибку. Но в случае с js я прошу слишком много.
При чём тут синтаксис? А так очень многие языки перекладывают ответственность на программиста, JS тут не при чём. Они тебе не подходят, это понятно, но это не значит, что они неправильные.
A>>>>Нет, не при чём, это ж просто инструмент. Когда ты режешь себе палец, это нож виноват или ты чего-то не учёл? S>>>Если у ножа нет скользкая ручка, плавно переходящая в лезвие? Виноват я буду лишь в том что вообще взял этот нож. A>>Не надо превращать мою иллюстрацию в аргумент. S>С чего вдруг? Вы решили перейти на аналогии, а мне "низзя"? Моя аналогия вполне иллюстрирует мою точку зрения.
Я не переходил на аналогии. Я использовал иллюстрацию. Мой тезис находится непосредственно перед ней. Ты игнорируешь тезис и пытаешься развить аналогию.
S>>>>А язык, который молча позволил совершить эти две ошибки совершенно ни при чём? A>>Не при чём. Я ж ответил уже. S>Фанатично.
Здравствуйте, anonymous, Вы писали:
A>Нет. Именно как я написал: A>map (+) [1,2,3]
К чему ты это написал? Разницы между скажем питоном и хаскеллем в реализации map-a нет. Есть разница в реализации плюса.
N>>В perl-е все работает не "ожидаемым" способом поэтому его просто надо забыть, как страшный сон, что собственно и произошло. A>Я же сказал, не важно. Ты пытаешься сменить тему.
Что дает аргумент "это же самое говно есть в другом говно-языке"?
N>>A если забыл, то сам себе злой буратин! That's the spirit! A>Да. Удивительно, правда? Есть языки, которые не контролируют каждый твой шаг.
Да, да... ведь если отстрелить себе ноги можно сэкономить на обуви.
Здравствуйте, anonymous, Вы писали:
A>При чём тут синтаксис? А так очень многие языки перекладывают ответственность на программиста, JS тут не при чём. Они тебе не подходят, это понятно, но это не значит, что они неправильные.
1) Если язык не способен контролировать элементарные ошибки, грош цена такому языку.
2) Вроде тут не язык мне подбираем, а я высказываю что именно мне не нравится в js. Вы же пытаетесь мне доказать, что на самом деле я должен любить эти "милые нелепости", ибо так они и задуманы.
A>Я не переходил на аналогии. Я использовал иллюстрацию. Мой тезис находится непосредственно перед ней.
В таком случае я проиллюстрировал другую точку зрения. И мой тезис вы знаете. A>Ты игнорируешь тезис и пытаешься развить аналогию.
Ваш тезис "язык идеален, а тот кто не согласен не прав, ибо пункт 1". Нет, я с таким тезисом (особенно в отношении js) не согласен, что и выразил.
A>Агрументация навешиванием ярлыков. Чувствую, разговор затянулся.
А как это назвать? Если, допустим, фанаты Эппла говорят "этой функции нет, значит она вам не нужна" — их обоснованно называют фанатами. Тут то же самое.
Здравствуйте, novitk, Вы писали:
A>>Нет. Именно как я написал: A>>map (+) [1,2,3] N>К чему ты это написал? Разницы между скажем питоном и хаскеллем в реализации map-a нет. Есть разница в реализации плюса.
К тому, что идёт обсуждение передачи в map функции двух аргументов вместо функции одного.
N>>>В perl-е все работает не "ожидаемым" способом поэтому его просто надо забыть, как страшный сон, что собственно и произошло. A>>Я же сказал, не важно. Ты пытаешься сменить тему. N>Что дает аргумент "это же самое говно есть в другом говно-языке"?
Нет, аргумент звучит так: нечто есть в другом языке. Твой «контраргумент»: это говноязык. А если я скажу, что у тебя говноаргументы, я выиграю спор?
N>>>A если забыл, то сам себе злой буратин! That's the spirit! A>>Да. Удивительно, правда? Есть языки, которые не контролируют каждый твой шаг. N>Да, да... ведь если отстрелить себе ноги можно сэкономить на обуви.
Нет-нет: соблюдай технику безопасности, и не отстрелишь себе ноги. Тебе больше нравится подход: мы не дадим тебе ружьё. Ну, ладно. Я не вижу, что тут можно обсуждать.
Здравствуйте, Somescout, Вы писали:
S>Здравствуйте, anonymous, Вы писали:
A>>При чём тут синтаксис? А так очень многие языки перекладывают ответственность на программиста, JS тут не при чём. Они тебе не подходят, это понятно, но это не значит, что они неправильные. S>1) Если язык не способен контролировать элементарные ошибки, грош цена такому языку.
Ну сколько можно твои вкусы обсуждать?
S>2) Вроде тут не язык мне подбираем, а я высказываю что именно мне не нравится в js. Вы же пытаетесь мне доказать, что на самом деле я должен любить эти "милые нелепости", ибо так они и задуманы.
Я ничего такого не говорил. Я утверждаю, что это не недостатки. Любовь ты можешь подобрать себе сам.
A>>Я не переходил на аналогии. Я использовал иллюстрацию. Мой тезис находится непосредственно перед ней. S>В таком случае я проиллюстрировал другую точку зрения. И мой тезис вы знаете. A>>Ты игнорируешь тезис и пытаешься развить аналогию. S>Ваш тезис "язык идеален, а тот кто не согласен не прав, ибо пункт 1". Нет, я с таким тезисом (особенно в отношении js) не согласен, что и выразил.
Зачем так тупо перевирать вот это?
A>Нет, [язык] не при чём, это ж просто инструмент.
Если ты возомнил себя мастером демагогии, я тебя разочарую.
A>>Агрументация навешиванием ярлыков. Чувствую, разговор затянулся. S>А как это назвать? Если, допустим, фанаты Эппла говорят "этой функции нет, значит она вам не нужна" — их обоснованно называют фанатами. Тут то же самое.
Это не надо называть. Надо приводить контраргументы — в этом суть дискуссии. Пока их не видно.