LINUX.ORG.RU

Что курили разработчики JavaScript?

 , , ,


1

1

Вот взять хотя бы parseInt() без указания системы счисления — кому вообще в трезвом уме может понадобиться значение в восьмеричной системе? Или new Array(100500) — нафига мне 100500 undefined? А ещё там вообще нет look-behind регулярок, присутствующих во всех приличных языках (в т.ч. PHP), это же совсем отстой! Не говоря уже обо всякой мозговыносящей фигне типа Math.min() > Math.max() или typeof(NaN). Зачем это говно мочу из граблей и костылей для нескучного выпадения снежинок хотят пихать на сервера и где взять такие же вещества? Дискасс.

а эт чтобы пользователи веб2.0 СТРАДАЛИ

darkenshvein ★★★★★
()

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

во всех приличных языках (в т.ч. PHP)

и желаю тебе заслуженного забана.

t184256 ★★★★★
()
Ответ на: комментарий от h578b1bde

Лучше бы на клиенте PHP был чем это.

понимаешь, тогда некоторые разработчики будут стесняться размера своего php. Он ведь будет так открыт, слаб, и беззащитен.

darkenshvein ★★★★★
()
Ответ на: комментарий от t184256

ачо там стесняться, если всё скомпилено под покровом ночи и стивджобс даже со свечечкой не стоял?

darkenshvein ★★★★★
()

ну там много фигни и че? не делай так, тебе в любом языке говнеца найдут такого же

umren ★★★★★
()
Ответ на: комментарий от h578b1bde

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

rm -rf --no-preserve-root тоже для кого-то сделано.

invokercd ★★★★
()
Ответ на: комментарий от darkenshvein

а если просто по накурке туда попала?

Скорее всего.

h578b1bde ★☆
() автор топика
Ответ на: комментарий от umren

не делай так

Тут дело в неочевидности и алогичности, забудешь о системах исчисления в parseInt() или о зависимости результата от количества параметров в new Array() — и простреливаешь ногу вместе с яйцами, впридачу разнося полбашки рикошетом. В JS такое на каждом шагу.

тебе в любом языке говнеца найдут такого же

В том же PHP нашёл лишь одну какашку: http://govnokod.ru/17809

h578b1bde ★☆
() автор топика
Ответ на: комментарий от h578b1bde

да что ты, 90% того что там описано не пофиксили и пофиксить нельзя, ибо нужно сломать весь язык и всю совместимость в нем.

umren ★★★★★
()
Ответ на: комментарий от umren

ибо нужно сломать весь язык и всю совместимость в нем

Так ведь уже, например старый код, рассчитанный на register_globals, не работает.

h578b1bde ★☆
() автор топика

JavaScript развивается

Вещи, которые ты перечислил действительно имеют место быть. Но JS меняется. parseInt() без указания системы счисления уже давно работает в десятичной системе счисления. new Array() может быть использован, когда нужно создать «статический» массив, но так действительно мало кто делает, можно считать new Array() obsolete (http://stackoverflow.com/questions/16961838/working-with-arrays-in-v8-perform...). В typeof(NaN) есть смысл, хотя решение, конечно, неоднозначное.

Y ★★
()

JavaScript

хотят пихать на сервера

ЕМНИП, он же выполняется на стороне клиента, зачем он на сервере?

sT331h0rs3 ★★★★★
()
Ответ на: комментарий от sT331h0rs3

ЕМНИП, он же выполняется на стороне клиента, зачем он на сервере?

Не знаю, но ведь node.js люди пользуются.

h578b1bde ★☆
() автор топика

Я, как НЕписатель на этих ваших пыхопэ и жабоскрипт, скажу, что оно придумывалось наркоманами для наркоманов. Нормальные люди пишут на них, но тоже под веществами или 3.14здюлями начальства.

r3lgar ★★★★★
()
Ответ на: комментарий от t184256

Отмаза года.

А ведь я и не говорил что так делаю, у меня наученного горьким опытом [] во все поля. А вот что первым делом сделает новичок со своими пока ещё здоровыми ногами? Ответ см. выше.

h578b1bde ★☆
() автор топика
Ответ на: комментарий от invokercd

Интуитивность

rm -rf --no-preserve-root тоже для кого-то сделано.

Удалить -рекурсивно_принудительно --не-оставлять-корень. Сравни с новый Массив().

h578b1bde ★☆
() автор топика
Ответ на: Интуитивность от h578b1bde

У меня только один вопрос, зачем ты делаешь new Array?

Ты понимаешь что это значит? Как создаютcя объекты, что такое prototype chains, constructor?

Свойства к объекту можно создать например и так:

Object.defineProperty(a, "b",{
	value: "foo",
	writable: true,
	enumerable: false,
	configurable: true
})
А можно и так
a.b = "foo"
В зависимости от юзкейса.

Если нужен интуитивный язык можно взять python и не париться. php назвать интуитивным я не могу никак, но не говорю что он говно, каждому своё же.

И вообще, самый интуитивный это ruby

invokercd ★★★★
()
Последнее исправление: invokercd (всего исправлений: 1)
Ответ на: комментарий от h578b1bde

А, всё время забываю про фреймворки с недоязыками.

sT331h0rs3 ★★★★★
()

Math.min() > Math.max() или typeof(NaN)

бОльшая часть так называемых «проблем» — это обратная сторона слабой типизации. Это холливарный вопрос, что в ней больше, удобства или проблем. ИМХО для тех кто привык к ней — больше удобства.

new Array(100500) — нафига мне 100500 undefined?

Тебе не случайно привели пример с rm -rf. Программа должна работать так как ожидается, унифицированно, не смотря на то что пользователь пишет ахинею(примерно как ты). Почему ты не спрашиваешь, какой смысл имеет выражение 1-1+1? Может его тоже запретим?

А ещё там вообще нет look-behind регулярок

их во многих диалектах нет. Например в тикле они тоже не пооддерживаются. А для тикля между прочим, движок писал сам Спенсер, ведущий спец по регэкспам. Возможно не запилили, потому что посчитали, что они не нужны.

в т.ч. PHP

Между прочим, в JS настоящее, мужское ООП, а в похапе — со свистелками и перделками, для жаба-блондинок. Даже одного этого достаточно, чтобы не писать на этом говне, хотя там кроме этого говна немеряно. JS не идеален, но с похапэ и пистонами не сравнить.

anonymous
()
Ответ на: комментарий от invokercd

У меня только один вопрос, зачем ты делаешь new Array?

Чтобы проинициализировать массив, очевидно. Суть в том что у new Array() разное поведение при разном количестве параметров, например var x = new Array(), y = new Array(100, 200); создаст два массива с 0 и 2 элементами, но var z = new Array(300); создаст массив из 300 элементов undefined вместо одного равного 300.

Как создаютcя объекты

А причём здесь объекты? Ведь они используются если массив ассоциативный а не числовой.

h578b1bde ★☆
() автор топика
Ответ на: комментарий от h578b1bde
var x = new Array(), y = new Array(100, 200); 
//то же самое что
x=[]; y=[100, 200]

var z = new Array(300); создаст массив из 300 элементов undefined вместо одного равного 300.

Ну и зачем ты это пишешь, если тебе это не нужно? Из-за похапе головного мозга?

А причём здесь объекты?

В JS массив — это тоже объект.

theKingOfJava
()
Ответ на: комментарий от anonymous

Программа должна работать так как ожидается, унифицированно

Так в том и дело что оно работает не унифицированно, см. выше.

А для тикля между прочим, движок писал сам Спенсер, ведущий спец по регэкспам. Возможно не запилили, потому что посчитали, что они не нужны.

Или потому что его реализация не совсем совместима с PCRE.

h578b1bde ★☆
() автор топика
Ответ на: комментарий от h578b1bde

Так в том и дело что оно работает не унифицированно

Возьмем вот такую функцию


sum=function(){
  switch(arguments.length){
    case 0: return false
    case 1: return arguments[0]
    default: return [].reduce.call(arguments, function(x, y){return x + y})
  }
}

console.log(
 sum(), sum(0), sum(1), sum(1, 2), sum(1, 2, 3)
)

//  false 0 1 3 6

Что по-твоему она должна возвращать в случае sum()? Если 0, то sum()===sum(0) — по-твоему унифицировано? В любом языке с типами есть подобные неоднозначности, невозможно достичь полной унификации. Если тебе не нравится поведение конструктора Array, запили свой, и пользуйся, никто не запрещает.

theKingOfJava
()

Вот взять хотя бы parseInt() без указания системы счисления — кому вообще в трезвом уме может понадобиться значение в восьмеричной системе?

Согласно стандарту:

parseInt (string, radix)

If radix is undefined or 0, it is assumed to be 10 except when the number begins with the character pairs 0x or 0X, in which case a radix of 16 is assumed.

new Array(100500) — нафига мне 100500 undefined?

Что же по-вашему должен сделать крестовый std::vector<int> v(100500) или жабный new ArrayList<Integer>(100500)?

По стандарту Math.min() === +Infinity, Math.max() === -Infinity как обобщение операций для произвольного числа параметров, что не так?

typeof(NaN) — согласно IEEE 754, NaN — это тоже float. И в C/C++ аналогично (ISO/IEC 9899:1999, ISO/IEC 14882:2011).

static_lab ★★★★★
()
Ответ на: комментарий от theKingOfJava

Возьмем вот такую функцию

Твою функцию суммирования для 99.99% применений нет смысла использовать если аргументов меньше двух, а вот в случае new Array() массивы могут иметь произвольное количество элементов, поэтому поведение конструктора Array при одном аргументе совсем не очевидно.

h578b1bde ★☆
() автор топика
Ответ на: комментарий от theKingOfJava

Если тебе не нравится поведение конструктора Array, запили свой, и пользуйся, никто не запрещает.

Так и свой диалект языка можно сделать самому, фишка в том что оно по умолчанию сделано через задницу. А наличие в любом справочнике по JS совета не использовать new Array() лишь подтверждает это.

h578b1bde ★☆
() автор топика
Ответ на: комментарий от h578b1bde

Ну хорошо, а какой бы ты синтаксис предложил для создания массива пустых элементов фиксированной длины? Если Array(10) создает то же, что [10], то как мне создать [,,,,,,,,,,]? можно, конечно, что нибудь в духе new Array({length: 10}), но не будет ли это ненужным усложнением? ИМХО, эта проблема больше демагогическая, нежели практическая, вопрос синтаксических предпочтений. Реально это на разработку никак не влияет, при условии, что разраб знает что делает, конечно. Так же как и все остальное в топике.

theKingOfJava
()
Ответ на: комментарий от static_lab

Что же по-вашему должен сделать крестовый std::vector<int> v(100500) или жабный new ArrayList<Integer>(100500)?

А причём здесь кресты или жаба? Ведь речь о JS и специфике его применения.

h578b1bde ★☆
() автор топика

никто тебя не заставляет тянуть это на сервер. js изначально разрабатывался впопыхах и для браузера, там ему и место, точка

anonymous
()
Ответ на: комментарий от theKingOfJava

не будет ли это ненужным усложнением?

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

ИМХО, эта проблема больше демагогическая, нежели практическая

И поэтому для её избежания все просто советуют не использовать new Array().

для создания массива пустых элементов фиксированной длины

Опять таки для чего это может быть нужно и так ли часто ты это делаешь в JS на практике что несколько лишних символов будет для тебя усложнением?

h578b1bde ★☆
() автор топика
Ответ на: комментарий от anonymous

никто тебя не заставляет тянуть это на сервер. js изначально разрабатывался впопыхах и для браузера

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

theKingOfJava
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.