×

Чем мне нравится JavaScript

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Что бы не говорили вещатели из коммерческих компаний как правильно писать код, но если этот код остается в недрах компании, то мы никогда не узнаем, а не пустая ли это была трескотня пижонов?

Равно как и приводимые сторонниками новых концепций академические примеры, которые либо не идут далее ’Hello, world’, либо, если делаются попытки ввести их в коммерческую область, остаются скрытыми в серверном коде. Речь — о коммерческом коде.

JavaScript, который исполняется в браузере, принципиально открыт для изучения, и исследуется с помощью дебаггера, как правило. FireBug от Mozilla и DragonFly от Opera (от корпорации добра браузер не поддерживаю). Опера на лету форматирует код после минимайзеров-обфускаторов и работает быстрее, но иногда есть причины попеременного использования.

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

Во что погрузился? Господи, что это?

Люблю JavaScript! )))

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn

Найкращі коментарі пропустити

В js адская, совершенно невменяемая слабая типизация и море условностей. За что её любить?!

Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Javascript — rulez, языки следует оценивать по их показателю простоты, эффективности и распространенности ... спрашивается какой похожий язык может что либо подобное ? :

bellard.org/jslinux

haskel говорите, python ..., а c# ? ... а может forth ... гы-гы ;)

Вы спрашиваете о распространенности? Их есть у меня!
VBA лидирует с просто титаническим отрывом, особенно в части функции «SUM(Ax;Ay)» ;)

Читал, но уже в середине книги стало слипаться от пропаганды Microsoft и от того, какие продукты у них крутые и какая обратная совместимость. Вы к примеру пробовали запускать приложения, разработанные для Windows 1-2-3 предыдущего поколения на своей системе?

Единственное что полезное у Джоэла — это тест Джоэла для команд от 0 до 12 баллов. К слову наша команда набрала 12 из 12.

не вижу смысла в VBA ... вообще никакого ... данная функция легко выполняется в любом не-VBA любимом броузере, причем на платформах, до которых VBA, ну наверное как от Земли до Альфы-Центавры ... ;)

В нем был смысл тогда, когда его стартовали. Была идея о том, что все можно будет делать в офисе. А оказалось что потребности бизнеса выросли заметно быстрее, и нужен кровавый энтерпрайз и не только.
Ему уже 20 лет как ...

Египетским пирамидам тоже по слухам более 10k лет, только до сих пор никто не може сказать как их юзать ...

Эксель же!

Всегда используют самый неподходящий язык, как например HTML

да нормально там всё ©
просто для каждой задачи следует использовать наиболее подходящий для этого инструмент, и инструмент JS в частности, позиционируется, именно как скриптовый язык для проектов средней сложности, с небольшими рисками. Идеал на сервере (node.js) — бэкенды какой-либо браузерки, html5-виджеты для смарт девайсов и альтернатива всяким там php, при создании асинхронных CMF уровня Kohana/Yii (Compound.js тот же), а в браузере — ну всё и так понятно... таким образом, имхо, Harmony JS (а особенно, когда таки прикрутят class-ы на уровне синтаксиса самого языка) располагает всем необходимым, что бы и быть используемой разработчиками и собственно нравиться.
В целом, кто думает, что даже клиентский JS только для alert(’hello world’) и селектов нод DOM-дерева, рекомендую почитать эту книгу

рекомендую почитать эту книгу
Тю, я думал там какой-то османи или классика типа стефанова.

Такие книжки мне всегда напоминали журналы мод )) как по моде завязывать фитюльки и бабочки. Все языки после Фортрана лишь легкие вариации по мотивам Фортрана.

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

Если знаешь как работает PC и можешь написать эмулятор PC, например, QEMU, наверняка сможешь это сделать и на JavaScript, а затем запустить на нем Linux, и всё это прямо в браузере: jslinux

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

не, жесть, у одних тут требования к JSу как к десктопным ЯВУ энтерпрайз-левела, другие в нулевом кольце скрипты запускать хотят )
одно из основных заблуждений различного рода — пытаться притянуть за уши все имеющиеся технологии и платформы к известной и уже когда-то изученной нише, а потом долго кидаться друг в друга оффтоповыми сравнениями и неуместными аллегориями, пытаясь доказать бесперспективность или ущербность чего-то, чья сфера применения ими изначально неправильно понимается

разумеется, можно писать чисто скриптовые вещи и на фортране с ассемблерными вставками, но это моветон и посему массами не практикуется, а понятие «модный» применительно к js-кодерам, суть — комплимент, да, большое спасибо, но мы это и так знаем, заодно желаем и другим выглядывать почаще из сайсера ;)

HTML и CSS — самыt неподходящиt языкb для сайтов, поэтому их и применяют

Да ничего страшного, но я думаю, что вы со мной согласны.

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

Ценители строгой типизации, а покажите, как в вашем любимом языке будет выглядеть запись такого теста:

describe "Array.filter()", () ->
it "should return a new array with items which match criteria", () ->
odd = [1,2,3,4,5].filter (item) -> item % 2
odd.should.include 1
odd.should.include 3
odd.should.include 5
odd.should.not.include 2
odd.should.not.include 4
val l = List(1,2,3,4,5)
val odd = l.filter(_ % 2 == 1)

Не знаю что такое odd.should.include 1

Не знаю что такое odd.should.include 1
Ассерты подмешанные во все объекты. От как раз про это он и говорил :)

UPD. Кстати, это коффеескрипт, так шо не факт что таки подмешали, а не вызов метода.

UPD. Кстати, это коффеескрипт, так шо не факт что таки подмешали, а не вызов метода.

github.com/...b/should.js#L72

Не знаю что такое odd.should.include 1

Вариация на тему Assert из JUnit. Существует из-за возможности добавить свойство в Object.prototype.

А почему просто написать assert condition как в джаве — плохо?

Нет, не плохо. Просто опять же вы вырываете из контекста. Я предлагаю посмотреть на весь фрагмент целиком в контексте известного выражения «code should read like prose».

Я не сильно понимаю что этот код делает, но конкретно что в джава/скала подходе ущемляет твои эстетические чувства?

Я не сильно понимаю что этот код делает...

Простой тест метода Array.filter().

«Обертка» в Java, вероятно, будет выглядеть так:

public class ArrayTest extends TestCase {
public void testFilter() {
// Write test code here.
}
}

И «начинка» без Scala выйдет не очень симпатичной. Да и тестировать будет нечего. Нет там фильтра анонимной функцией.

Ну в джава код да, не такой красивый будет. Но в скала ведь получше? Т.е. это перпендикулятно статической/динамической типизации?

«Обертка» в Java, вероятно, будет выглядеть так:
Ну тогда уж и приводите код на джаваскрипте, а не на коффеескрипте.
Нет там фильтра анонимной функцией.
Новость: не во всех современных движках джаваскрипта он есть. Это дело сугубо библиотеки, а не языка.
Вариация на тему Assert из JUnit. Существует из-за возможности добавить свойство в Object.prototype.
Только вопрос: Зачем?
ИМХО, ассерты лучше явные, я пользуюсь Expect/Jasmine.

По-моему, дело вкуса. Я не считаю, что в данном случае можно судить категориями «лучше» или «хуже». Просто привел пример, как симпатично может выглядеть код на динамическом языке. Код, который прочтет любая домохозяйка.

Я не считаю, что в данном случае можно судить категориями «лучше» или «хуже».
Ну почему же. Допустим у меня в объекте есть поле с именем should...
Просто привел пример, как симпатично может выглядеть код на динамическом языке.
Только вопрос: Зачем?
Просто привел пример, как симпатично может выглядеть код на динамическом языке.
так «симпатично» или «понятно»??? я лично (как java dev) увидел лишь избыточную копипасту с magic numbers и вызовом неизвестно где и неизвестно как объявленных свойств/методов. классический индусский код.

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

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

Да и тестировать будет нечего. Нет там фильтра анонимной функцией.
вдруг выплывает, что это был тест, причем юнит тест (в JS? wtf!?), причем юнит тест анонимной функции (wtf2?!), причем объявленной (что тоже не очевидно, тут я могу ошибаться) непосредственно в теле теста (wtf3?!).
посему вопрос к вам: вам приходилось когда-нибудь работать в команде? неужели никогда не доводилось почувствовать разницу между «красиво» и «понятно»?
посему вопрос к вам: вам приходилось когда-нибудь работать в команде?
даже не знаю, что и ответить.
с вами — определенно нет, я бы запомнил.

по остальным wtf возражения были бы резонными для реального кода, а не синтетического примера. но

причем юнит тест (в JS? wtf!?)
не могу обойти стороной. откуда здесь-то «wtf»?
юнит тест (в JS? wtf!?)
Эээээ... И давно вы с JS работали? и работали ли вообще?

в последний раз — в минувшую пятницу. рихтовал код, который (как внезапно обнаружилось) меняет стиль тега <body> при вызове модального окна. открывал диалог — страничка «синяя» была, закрыл диалог — она уже «зеленая». ваш коллега фиксил так CSS багу..
а про юнит тесты в JS вы меня чесслово заинтриговали. расскажите подробнее, пожалуйста, что именно покрывается юнит тестами в JS? Ajax запросы можно замокать? целостность системы можно контролировать? в комманд лайне (без броузера, при билде, например) тест запустить можно?

AJAX мокается. В коммандлайне при билде тесты запускаются при помощи PhantomJS. Криворукие тиммемберы/собственный узкий кругозор — не повод хаять язык программирования.

уговорили. забираю свои слова обратно.
фразу «юнит тесты в JS? wtf?!» следует читать «юнит тесты в JS? sic!» и да помогут вам ровные руки и широкий кругозор...

F#

module ListSpec
open NaturalSpec

[<Scenario(Description = "List.filter")>]
let ``should return a new array with items which match criteria``() =
Given [1;2;3;4;5]
|> When List.filter (fun item -> item % 2 <> 0)
|> It should contain 1
|> It should contain 3
|> It should contain 5
|> It shouldn't contain 2
|> It shouldn't contain 4
|> It should have ( length 3 )
|> Verify

Ценителю кривых недоязычков надо бы научиться различать строгую и статическую типизацию, чтобы не выглядеть банальным невеждой. Для работы данного примера нужна динамическая типизация. Динамическая типизация — это как в Python, Ruby, Erlang, LISP и ещё куче мест, где тип переменной не задаётся и может быть любым из известных, но операции с ним всё равно такие. какие позволены типу. А вот когда (хрестоматийный пример про JS) ’5’-3==2, но ’5’+3==53, это никакой динамикой не объяснить, это банальный бред, мокрая рваная тряпка вместо строгой типизации.

JS отвратителен не динамической типизацией, не поддержкой DOM, не JSON, не замыканиями и ничем подобным, но 1) слабой типизацией с непресказуемыми эффектами, 2) кучей дебильных решений по синтаксису, которые взрываются самым неожиданным образом, 3) аналогичных проблемах с библиотечными функциями. В этом он близок PHP (ещё один выбредок веба) и Perl, который всего лишь старался быть «лучший шелл, чем шелл, и лучший awk, чем awk», но его неизбежные проблемы были раздуты и подняты на флаг как принципиальные решения.

Простейшее гугление по «weird javascript feature» показывает сотни таких примеров. Вот небольшая выборка со StackOverflow:

2 == [[[2]]]
a[[[["abc"]]]] === a["abc"]

Сравнения — некоммутативные и нетранзитивные:

’’ == ’0′ // false
0 == ’’ // true
0 == ’0′ // true
false == ’false’ // false
false == ’0′ // true
false == undefined // false
false == null // false
null == undefined // true
" \t\r\n" == 0 // true

Неупорядочённый синтаксис разделения операторов, когда два оператора, валидных по отдельности, рядом через ’;’ становятся синтаксической ошибкой. Странные и неочевидные правила automatic semicolon insertion, при отсутствии возможности явно исключить его на стыке строк, как сделано во всех нормальных языках с построчным синтаксисом (Python, Occam, BASIC образца MS, и так далее).

Молчаливая конверсия между числами и строками с местами неочевидными и неуправляемыми правилами.

Восьмеричные константы по ведущему ’0′ и молчаливое игнорирование проблем с ними (parseInt("08″) == 0), а как общий подход для библиотеки — вообще тенденция на максимальное маскирование ошибок вместо показа их как исключений (опять-таки, общее с PHP и Perl).

Кривые правила видимости переменных (например, явно объявленная во вложенном блоке будет видна снаружи от него).

Возможность грязного хака с заменой значения для undefined, Infinity, NaN (общая проблема с PHP и старыми Питонами, но эти хоть в новых версиях такое правят).

Бездумное копирование свойств старых проблемных API (например, работа с датами — год минус 1900, январь как 0).

void как префиксный оператор.

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

в целом поддерживаю, однако, я бы не ставил perl в один ряд с js и php. все таки в perl результат намного более предсказуем, учитывая, например, что однотипные операции со строками и числами отличаются синтаксически. например:
$str1 cmp $str2 -- $num1 <=> $num2
$str1.$str2 -- $num1+$num2

а регулярные выражения в перле реализованы лучше, чем я встречал где-либо до и после. плюс вкусности типа map/grep/sort. в остальном, таки да. толерантность языка к гуано-стайл кодированию в свое время вынудили меня мигрировать с perl на java

Я б не ставил perl «в один ряд с», кабы не одна ситуация — рассказываю именно в таком виде, как сам столкнулся, чтобы живее было:) VoIP свич, конфигуратор передаёт правила раутинга. Управляющий код на Perl, трансфер правил в YAML. Тестеры говорят «нихрена не работает», идём разбираться... тестовые префиксы номеров вида 000999 передаются в свич в виде... 999! Пока YAML dumper’у не сказали, что все скаляры считать строками, он не начал правильно посылать. Оказалось, что средствами самого языка нельзя отличить скаляр — число от скаляра — представления этого числа в виде строки... на уровне C и работы со структурой SV — можно, да кто ж туда пойдёт возиться. То, что операции разделены — уже хорошо — не такой кошмар, но невозможность различить типы скаляра местами очень вредит. А хохмы типа «0» как false, но «00» как true? Это из той же оперы:( В Питоне сделано лучше — любая непустая строка это true, а если предполагается число — зовите int() явно.

«0» как false — это known issue )) особенно учитывая, что булевого типа переменных в перле нет. ну а YAML...такой YAML. никогда не понимал причин его пользования, когда есть hash + Storable. предположу, что ваша проблема была больше в реализации этой библиотеки, которую запользовали as trusted, чем непосредственно в perl.
что, естественно, не отменяет прочих недостатков языка.
в моем случае более фатальным было отсутствие ограничений на модификацию переменных в зависимости от того, где она объявлена и какой сущности принадлежит... когда силами «умельцев» в коде появляется несколько тысяч глобальных переменных, а юнит тестирование отсутствует в принципе, процесс разработки/багфиксинга превращается в сущий кошмар. в таком контексте (более чем, в предсказуемости результатов) таки да, имеет смысл perl поставить в один ряд с js/php.
забавно, но в java находить концы (локализовать проблему) даже в индусском спагетти коде мне сейчас проще, чем было ранее в перловом проекте, разработанном силиконо-долиновыми пиндосами )

YAML. никогда не понимал причин его пользования, когда есть hash + Storable

hash+Storable мне не помогут, когда получатель на другом хосте и не на Perl, а на Python. Тут годятся только языконезависимые форматы. Ну а YAML или JSON — решено было уже по месту и по вкусу.

когда силами «умельцев» в коде появляется несколько тысяч глобальных переменных

Такую херню можно сделать на любом языке... мы даже на Erlang’е такое сумели:) Это всецело вопрос культуры разработки.

а юнит тестирование отсутствует в принципе

Вот за это и следовало бить виновников по наглым рыжим мордам.

чем было ранее в перловом проекте, разработанном силиконо-долиновыми пиндосами

Да, write only это страшная сила:( без полного рефакторинга и не начинать.

LOL, спасибо:))

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

А вот настоящий программист не будет плохо отзываться о любом языке. Ему же всё равно, на чем написать программу. Как труЪ шофер будет с любовью поглаживать даже горбатого запорожца, хотя вчера еще сидел за баранкой фуры с прицепом.

Вот я недавно батничек писал, и там всё как положено, вызовы, проверки, аргументы. А уж если дотянусь из него до debug.com, так вообще полет к небесам...

.
.
PS: очень остроумно, прям АИ какой-то, имя дебаггера в ссылку преобразовал. Опять язык кокой-та чудит... )))
Горбатого запорожца в кавычки поставить, или и так понятно про кого это? ))

нынче в программировании никакой математики нет.

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

Я не против каких-то хитрых правил сравнения, если они действительно окажутся полезными. Но: 1) по POLA, если вы применяете знак «==», то большинство уже предполагает, что данное сравнение будет как минимум коммутативно и транзитивно; 2) вводя свои правила, надо их придумать так, чтобы они были хотя б сами с собой согласованы, а не то, что мы видим. А знаков потом можно много применить, см. например подход Perl6.

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

Увы и ах, не согласен. Представьте себе «Запорожец» с колёсами от БелАЗ’а, но с тем же двигателем, причём второй багажник приварен так, что закрывает водителю половину обзора вперёд, а омыватель лобового стекла разворачивает стекло, поливает всё в салоне включая водителя и затем поворачивает стекло обратно:) Будет водитель радоваться такой машине? При полном отсутствии других и возможности переделать — да, сидя в водолазном костюме с электроподогревом и ругаясь сквозь зубы:) Но в цивилизованных условиях он первым делом постарается добыть взамен L200, предполагая задачу возить картошку на продажу:) Так и тут — Javascript в нынешнем виде аналогичен тому запорожцу и живёт только за счёт монополии. И то — очень много любителей использовать его только на нижнем уровне, как ассемблер, а сверху громоздить что-то своё.

Вот я недавно батничек писал, и там всё как положено, вызовы, проверки, аргументы.

Ну я почти каждый день пишу батники (только на юниксовом шелле, а не виндовом), а при чём тут они? ;)

по POLA, если вы применяете знак «==», то большинство уже предполагает, что данное сравнение будет как минимум коммутативно и транзитивно
странно полагает/ наверное, про явное и неявное приведение типов слышит впервые.
может, тогда большинство полагает, что у всех операторов одинаковый приоритет?
наверное, про явное и неявное приведение типов слышит впервые.

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

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

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

Мысль, что в программировании математики больше, чем в филологии или в ботанике, обманчива.

Суть математики как раз в том, чего нет в программировании, в физике, и прочих биологиях — утверждения в математике либо признаются без доказательств бесспорно истинными аксиомой, постулатом, принципом, либо истинность каждого утверждения строго доказывается. В программировании с этим всё строго наоборот, программисты прямо пишут об отказе от всяких гарантий безошибочности, отказе от ответственности за причиненный вред при использовании, и прочую чепуху и детский лепет.

Что такое программа? Это просто математическое уравнение, состоящее из длинного-предлинного полинома в натуральных числах. А что такое уравнение? Это запись *утверждения* о равенстве значений двух функций на общей области значений аргумента. Математик будет утверждать только то, что может доказать. Следовательно, поскольку запись программы это запись полинома, и любая математическая запись это утверждение, то записать программу математик мог бы лишь после ее доказательства. А вот физик, ботаник или программист свои утверждения запросто напишут без доказательств.

Предостерегу от смешения понятий обоснование и доказательство. К примеру приведу утверждение: «все числа четные». Обоснований может быть сколько угодно, 8, 20, 12 ... Но это не доказательство. Никакой эксперимент, ни у физика, ни у программиста, ни у ботаника, не доказывает истинности принципиально.

Между тем, программу проверяют методом тыка, и получают лишь еще одно обоснование предположения, что программа не содержит ошибок. Или иначе, в терминах математики, составленное уравнение верно на всей области значений аргумента. Физики, у которых тоже нет никаких своих нематематических особых физических способов доказывания, ставя эксперименты, тоже лишь выискивают новое обоснование. Эксперимент утверждает лишь то, что для этих входных данных — ошибок в общем утверждении нет. Про создание программ верно говорят: программирование это искусство. Танцы с бубном тоже искусство.

Насчет критики языков программирования. Во-первых, мне всё время представляется, что должна подразумеваться пропущенная частица *для*. Критика языков *для* программирования. Если человек не понимает сути искусства программирования, то изучение языка ему мало поможет. С другой стороны, для изучения, как программируют, необходимо понимать написанное на языках для программирования. Язык для программирования это как средство для передвижения, когда уяснил, как программировать.

Вот я и не представляю у труЪ шофера лютую ненависть к тому или иному средству передвижения. Посокрушается о недостатках и неудобствах, поворчит, но раз сказали «едем на этом», значит, едем «на этом». )))

Мысль, что в программировании математики больше, чем в филологии или в ботанике, обманчива.

Не менее, чем представление о том, что эта мысль была кем-то высказана:) Вы с кем спорите-то? Я не вижу тут ветряных мельниц.

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

Я не знаю, что Вы считаете математикой, что это её суть. Я уж не говорю о том, что некоторые основания математики в принципе недоказуемы, и это доказано, что их нельзя доказать (!) - в результате то, что мы используем, является результатом общего соглашения, направленного чисто на практические результаты. Почитайте хотя бы в общем результаты Чёрча, или что такое континуум-гипотеза. Да даже в элементарной геометрии мы имеем такие допущения — аксиома про параллельные, которая не обязана быть верной.
Математика сама по себе — это сферическая логическая игра в вакууме. Смысл ей придаёт связь с реальностью, с описываемыми явлениями. А качество этой связи — есть вопрос качества той модели, которая применяет математику.

У нас есть понятие «равенство». Оно само по себе предполагает определённые ограничения на его результаты. Если A == B, то должно быть B == A. Да, это не математика как таковая. Математику совершенно нет проблем определить такое «равенство», которое антикоммутативно или зависит от стохастического фактора. Вопрос только — накойхер это делать? И если вы определяете нечто, что названо «проверка на равенство», но оно не соответствует ожиданиям от отношения равенства — тут есть два варианта: или написать об этом огненными буквами на всех стенах (как приходится делать пишущим на PHP или JS), или переименовать его в более подходящее имя (как делают в качественно проектируемых языках). Например, сюда хорошо подходит «is», принятое в Питоне, или «=~» из Перла (если не ограничивать его regexp’ами).

то такое программа? Это просто математическое уравнение, состоящее из длинного-предлинного полинома в натуральных числах.

А ещё это арбуз, заполненный семечками в определённом порядке. А ещё я могу её сравнить с поэмой или с ветром. Какой смысл в таком сравнении?

то записать программу математик мог бы лишь после ее доказательства.

Есть понятие математической верификации программ. Есть языки, подготовленные к этому существенно лучше остальных. Есть задачи, под которые обязательно писать с верификацией. Но всё равно код такой программы вначале придумывают, а потом доказывают. И не бывает так, что вначале докажут без кода, а потом пишут, что же именно доказывали:)

[пропустил остаток потока сознания, который не относится к теме никоим образом]

Язык для программирования это средство для передвижения.

Вот я и не представляю у труЪ шофера лютую ненависть к тому или иному средству передвижения. Посокрушается о недостатках и неудобствах, поворчит, но раз сказали «едем на этом», значит, едем «на этом»

Нет, уважающий себя шофёр просто откажется ехать на том, где ему не хватает обзора или где колёса норовят отвалиться на ходу. Он скажет — начальник, или давай нормальное и целое ТС, или иди нафиг. И только программист позволяет себе ездить на постоянно рассыпающейся таратайке — но только до тех пор, пока он действительно не начинает отвечать за ошибки, хотя бы частью заработка.

Чем хуже инструменты, тем дороже программисты.

Чем хуже инструменты, тем дороже программисты.
jobs.dou.ua/...1=4&exp2=10
jobs.dou.ua/...1=4&exp2=10
jobs.dou.ua/...1=4&exp2=10

RoR и Scala — гуано
Delphi — наше ффсе
:)

</sarcasm>

Я смотрю, вы хотите пообщаться. А вы считаете, что Scala в её сегодняшнем состоянии можно назвать хорошим инструментом, по сравнению с Java? Порог вхождения значительно выше, небольшая и разрозненная коммьюнити, существующий тулсет беднее, недостаток специалистов на рынке, молодой развивающийся язык, в следствие чего часто возникают проблемы с обратной совместимостью. Использовать Scala на сегодняшний день очень недёшево, ROI по сравнению с Java весьма сомнительный. Возрастающая популярность Scala держиться на энтузиазме к хорошему языку программирования (что ещё не делает её хорошим инструментом), а также на том, что у компаний, диктующих трэнды в долине, слишком много лишних денег. Цену на Scala-разработчиков на сегодняшний день взвинчивают именно её недостатки, а не достоинства.

На счёт того, насколько Delphi был плох как инструмент во времена своего расцвета, и насколько сейчас хорош RoR — тоже всё совсем не однозначно. Так что если вы считаете, что приведённые вами ссылки на список работ с ДОУ (это уже даже не касаясь репрезентативности выборки, о которой вы сами часто любите порассуждать) кому-то что-то доказывают, то рекомендую заодно пойти посмотреть на количество вакансий на ДОУ по той же Scala.

молодой развивающийся язык
Языку 10 лет. Не очень то и молодой
Порог вхождения значительно выше
Кучку индийцев не наймеш же за миску риса
назвать хорошим инструментом, по сравнению с Java?
Чем скала хуже джавы?
Чем скала хуже джавы?
Тем же чем и ЦПП хуже Ц.

Немного не по теме, но всё же: Linus Torvalds on C++

Языку 10 лет. Не очень то и молодой
Что такое 10 лет для языка программирования? Сравните с возрастом Python, Ruby, JavaScript, не говоря уже о C или даже C++. Java ненамного старше, но она не была университетским проектом первые 5 лет своего существования
Кучку индийцев не наймеш же за миску риса
И я об этом.
Чем скала хуже джавы?
Не поймите меня превратно, я сам Скалой на жизнь зарабатываю. Как язык программирования, Скала далеко впереди по сравнению с большинством мэйнстримовых языков. О том, чем Скала (пока ещё) хуже как инструмент, я написал выше.
Порог вхождения значительно выше, небольшая и разрозненная коммьюнити, существующий тулсет беднее, недостаток специалистов на рынке, молодой развивающийся язык, в следствие чего часто возникают проблемы с обратной совместимостью
Расскажи пожалуйста, в чем для тебя оказался порог выше, чего именно тебе не хватает в тулсете и какие именно проблемы с обратной совместимостью ты испытываешь. А то у меня как то все Ок со всем.

Я вам отвечу печально известным gist’ом, который не так давно облетел все интернеты и вызвал массу бурлений. : «Success» story Yammer’а.

В чём порог лично для меня (хотя я себя считаю весьма посредственным программистом): у меня до сих пор проблемы с концепциями вроде аппликативных функторов (да и доброй половиной scalaz).

Я вам отвечу печально известным gist’ом, который не так давно облетел все интернеты и вызвал массу бурлений. : «Success» story Yammer’а.
Ну так это слегка бородатый наброс, сейчас большинства проблем описаных в гисте нету.
В чём порог лично для меня (хотя я себя считаю весьма посредственным программистом): у меня до сих пор проблемы с концепциями вроде аппликативных функторов (да и доброй половиной scalaz).
А я вот не знаю что такое апликативные функторы(или забыл) и никогда не трогал скалаз, но вполне регулярно пишу код на скале, ЧЯДНТ?
Ну так это слегка бородатый наброс, сейчас большинства проблем описаных в гисте нету.
Вы правы, скоро уже полтора года как произошёл этот неприятный инцидент, но с тех пор почти ничего не изменилось — этот процесс не может быть быстрым.
А я вот не знаю что такое апликативные функторы(или забыл) и никогда не трогал скалаз, но вполне регулярно пишу код на скале, ЧЯДНТ?
Не далее как лет 5 назад многие PHP-разработчики не понимали зачем им ООП, некоторые этим даже гордились.
Вы правы, скоро уже полтора года как произошёл этот неприятный инцидент, но с тех пор почти ничего не изменилось — этот процесс не может быть быстрым.
Та не мало, сбт вполне стабилен, удобен, надежен и имеет кучу плагинов, и инкрементальную компиляцию с висящим в бекграунде разогретым компиллером, несовместимыв версий скалы с тех пор тоже не уменьшилось, куча конторок вроде линкеина и твитера закомитились на скалу и плей, плодя либы и тулзы, скала айдии вполне юзабельна с автокомплитом и рефакторингом, количество работ тоже вполне растет www.indeed.com/...ends/scala.html.
Не далее как лет 5 назад многие PHP-разработчики не понимали зачем им ООП, некоторые этим даже гордились.
и как это относится к входному порогу в скалу? скалаз к счастью не стало мейнстримом пока как ооп.

Программисты использующие Emacs и пишущие на Common Lisp имеют большой рейт ?

Вы знаете, личные наблюдения показывают, что программисты, которые используют Emacs, обычно очень серьёзные ребята, а CL не совсем уж язык, на котором можно прямо так брать и писать, а вот специалисты по Clojure чувствуют себя неплохо.

Clojure чувствуют себя неплохо
Но не в Украине

А что тут, гастроли Java-секты с номерами «нет жизни без строгой типизации», «труъ ООП» и «эти адские колбэки»?

Коментар порушує правила спільноти і видалений модераторами.

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

Конечно! Вот посмотрите, как круто сделано на великом и могучем JavaScript www.youtube.com/...he harlem shake

Угу, вот сделал я игрушку, запостил, а её у меня содрали. Код то открыт. Люблю джаваскрипт!!!

Угу, вот сделал я игрушку, запостил, а её у меня содрали. Код то открыт. Люблю джаваскрипт!!!
А для того чтобы такого не случилось, надо вместо спортзала, почитать про минимизаторы джаваскрипта (даже обфускаторы не надо), аджакс и тд :)

Вместо спортзала? Бугага! В случае войны я буду про JS рассказывать? Угу, вот прямо так и вижу, как я бандитам рассказываю про жабаскрипт.

Если серьёзно, игрушка с аджаксом это адский ад. Мне нужно сервер иметь для публикации крестиков — ноликов!

+ Прототипное наследование
+ отсутствие строгой типизации
+ интерпретатор со всеми своими «прелестями»

Не — не — не, Девид Блейн. Джаваскрипт это только динамическое содержимое сайтов — не более. Игры, серверсайд, десктопные приложения на нем писать мрачно.

Вместо спортзала? Бугага!
Так вы же работаете за деньги? Своим невежеством вы теряете эти самые деньги :)

Я не пишу на JS по причинам озвученным выше.Жабаскрипт это для сайтов, ничего достойного для десктопа/мобайла на нем никто не написал. Даже простенькие игрушки делать не имеет смысла: геммороя много, а выхлопа нет

Мелкософт так не считает. К сожалению.

Мелкософт до сих пор не вживил в свой дерьмобраузер поддержку HTML5.
Даже шутка такая есть: как определить, HTML5 ли ваше приложение, или просто жабаскрипт?
Запустите его в експлоере. Работает? Это не HTML5!

Поддержку HTML5 полностью ещё никто не вживил. Правда Ишак её поддерживает даже слабее других.

В энгрибердс хорошая задумка, технически реализовать их не сложно. То есть, абсолютно. Игры такой сложности делались на флеш году эдак в 98. Танкионлайн слабо на хтмл5 сделать, или хотя бы более — менее сложную технически изометрию? Правильно, слабо, а почему? Да в принципе то сделать можно, но займет на порядок больше времени и поддержка будет на порядок же дороже. Так что, извините господа, но пока ХТМЛ5 только для сайтов. Эксперименты с играми есть, но пока это только эксперименты — для промышленной разработки не подходит.

И потом, вот давай так: что я получу от разработки игр на хтмл5? На одной чаше весов это ужасное прототипное наследование, прелести интерпретируемого языка, а на другой что?

p.s. Только не нужно рассказывать, что за ХТМЛ5 будущее. Очень далекое будущее я бы сказал. Вернее будущее есть и очень хорошее, но в своей нише. JS для разработки интерактивных элементов сайтов, тут он вне конкуренции. Для разработки же RIA ничего лучше флеша пока не придумали

то есть «достойное» — это не «успешное», а «математические сложное»? в таком случае, я так понимаю, под j2me вообще ничего в принципе успешного быть не могло. а то, что кто-то на продаже несложных игрушек нормально зарабатывал — то фигня: 3D нету ведь. да и на современных смартфонах(кроме топа, наверное) ничего хотя б уровня С.Т.А.Л.К.Е.Р.а не запустится. значит, Java и Obj-C не подходят для чего бы то ни было достойного?
p.s. hexgl.bkcore.com

под j2me вообще ничего в принципе успешного быть не могло. а то, что кто-то на продаже несложных игрушек нормально зарабатывал — то фигня
J2ME был на тот момент единственным способом запускать контент на мобильных телефонах. Что я получаю делая игру на HTML5, какие достоинства для разработки игр у этой технологии? Технических проблем предостаточно, а хорошего то что?
ничего хотя б уровня С.Т.А.Л.К.Е.Р.а не запустится
См. выше по поводу разницы возможностей. Если есть всем хороший, при этом кроссплатформенный Adobe AIR зачем делать игры на имеющем только малую часть того, что умеет флеш HTML5, какие выгоды?

оке, я понял.
дело не в языке, а в платформе, так?
был бы javascript вместо actionscript’a во флеше и претензий не было бы. верно понял мысль?

Не только в платформе: JS — язык с динамической типизацией. Писать на нем сложные приложения тяжело. Вопрос: зачем мучиться, если есть языки со статической. Там, где есть только JS ничего не попишешь — приходится. Но если есть более совершенные средства, зачем платить больше?

Писать на нем сложные приложения тяжело.
А всякие гуглы и не знают.

Ну Google все-таки со своим Dart и GWT использует/продвигает немного альтернативный путь.

Ну Google все-таки со своим Dart и GWT использует/продвигает немного альтернативный путь.
Че правда? ГВТ в паре ненагруженных сервисов, а Дарт где?
ГВТ в паре ненагруженных сервисов

Angry birds же

Дарт где

Наверное в будущем.

Angry birds же
Меганагруженный сервис?

Интерфейсы Google DFP и Google Adsense тоже похоже на GWT, ужас как тормозят.

Меганагруженный сервис?
А какая разница для гвт мега нагруженный там сервис или нет?
А какая разница для гвт мега нагруженный там сервис или нет?
Было сказано в том контексте, что если не важна производительность, то пофик на чем писать, а если важно то джаваскрипт и прямые руки.

НУ так производительность на клиенте никак не связана с нагрузками на сервер.

НУ так производительность на клиенте никак не связана с нагрузками на сервер.
Как пример лишние (более активные) аджакс-запросы, больше отдаваемый контент (хоть они и говорят что там все гут, видел случаи когда для простых задач генерировалось по 300-500 К джаваскрипта)

Я и по 2мб видел, если там куча логики, но оно ж загружается всего один раз, и кешируется на клиенте, а потом все летает. С аджаксом проблем не понял, какие лишние запросы? Как запрограмишь так и будет..

Как запрограмишь так и будет..
Лажают часто. (но в общем согласен)
Я и по 2мб видел, если там куча логики, но оно ж загружается всего один раз, и кешируется на клиенте, а потом все летает.
Не всегда кешируется (особенно если 2 Мб), довольно часто жалуются что нет контроля (типа не повезло и у тя УИ подвис на несколько секунд)
Все-таки я, неверное, не совсем корректно выразился дело скорее в масштабах УИ (по большей части там проблемы), хоть и на сервер и довольно часто на сеть может давать не хорошую нагрузку.
Было сказано в том контексте, что если не важна производительность, то пофик на чем писать, а если важно то джаваскрипт и прямые руки.
Чето мне кажеться, что если важна производительность, то это чтото типа Ц++, КУтя, и прямые руки... но никак не жабаскрипт.
то это чтото типа Ц++, КУтя, и прямые руки
1) Вы не прочитали всю ветку
2) Вы не понимаете почему все делают веб-интерфейсы.

какраз читал. Помню гвт релейтед видео, где ребята из гугла показывали, что если выполнять логику на клиенте, с учетом кучи хаков и оптимизаций (гвт, не чистый жс), то получаеться одно время. А если такой жава код без оптимизаций тупо выполнить на сервере — то получаться время в 10 раз быстрее.

А если такой жава код без оптимизаций тупо выполнить на сервере — то получаться время в 10 раз быстрее.
1) При чем тут КуТ?
2) У ребят из гугла какая сетка была?
3) Ну так сравнивали бы джаваскрипт написанный руками, а не генеренный.
ГВТ в паре ненагруженных сервисов
на сайтеге написано что оркут его использует
на сайтеге написано что оркут его использует
И это радует обоих бразильцев которые им пользуются.

на википедии написано 33 миллиона активных юзеров.

А ты гугл? Вот давай ты сделаешь на свои деньги игровую студию и выберешь JS в качестве базового языка. А чо, гугл — то не знает!

Спорим, ты будешь думать не о гугле а о том, как поскорее выпустить игру и начать на ней зарабатывать. Денежки — то кровные

PlayN is a cross-platform game library that allows you to create a single Java codebase that runs in HTML5, Java, Android and Flash.

developers.google.com/playn

PlayN is a cross-platform game library that allows you to create a single Java
Сказать то что хотел? Таких кроссплатформенных вещей не один десяток. Только кто о них знает, кроме создателей и где ты найдешь желающих освоить эту технологию, учитывая что кроме тебя она никому не нужна?
Бугага! В случае войны я буду про JS рассказывать? Угу, вот прямо так и вижу, как я бандитам рассказываю про жабаскрипт.

У меня аж дыхание спёрло, когда читал.

У меня sudoku.org.ua игрушка с аджаксом, имею сервер для публикации цифр в клеточках! Для десктопа написал на C#, что было удобно то и использовал без священных воен. Пипл хавает.

Ну ты же эту судоку не распространял на игровых порталах. Если бы пришлось делать это, обнаружил бы много интересных вещей. К примеру, что некоторые JS вещи не работают в некоторых броузерах. В других работают, но не как планировалось. В общем — то игру можно и на ассемблере написать, наверное. Но с целью заработать делать ты этого не станешь, правда?

Ну вместо распространять пришлось написать сайт, покупать домен, хостинг и все такое.

К примеру, что некоторые JS вещи не работают в некоторых броузерах.

Ты не поверишь, но некоторые CSS вещи тоже не работают в некоторых браузерах, у меня, помню с IE 5.5 были проблемы (в 2005-м) :), и HTML5 теги могут не работать.

В общем — то игру можно и на ассемблере написать, наверное. Но с целью заработать делать ты этого не станешь, правда?

Я выбирал инструменты которые одновременно
— удобны и просты и доступны для меня (PHP/JS/.NET)
— доступны широкому кругу пользователей, например Silverlight версия вряд ли порадовала большинство из них.

у меня, помню с IE 5.5 были проблемы (в 2005-м) :), и HTML5 теги могут не работать.

Бинго! Флеш хорош тем, что работает везде. Ну кроме IoS и линукса. Но доля пользователей второго очень мала, а для первого есть Adobe Air.

доступны для меня
Silverlight версия вряд ли порадовала большинство из них.

Флеш де факто есть на 90% десктопов.

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

Флеш игрушки тоже хорошие, я эти люблю:
www.kongregate.com/...es/kingdom-rush
www.kongregate.com/...t-touch-my-gems
и на HTML5 они наверное бы работали не так хорошо как на флеше.

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

Честно говоря, я не разбираюсь в этом рынке :(

Интересно, сколько денег (в месяц или суммарно) приносит типичная игра, на флеше, например? И какая там модель монетизации?

Ровно столько — же, сколько любая другая мобильная игра. Устанавливается она из стора так же, как другое приложение и никто даже не догадывается, что сделана она на HTML5

Проект хороший, но как на нем срубить бабла я представляю слабо

Там в правой колонке большой рекламный блок :)

А че флеш на линуксе не работает ? Даже ж в андроид поддержка была...

Ну дык потому, что мало людей на линуксе сидит. Это серверсайд

Да все нормально там с флешом. Фигню вы какуюто рассказываете.

Дело в том, что адоби официально прекратил поддержку и выпуск новых версий флешплеера для линукс. Старые версии, естественно, никуда не делись

Скопировать код можно и миними...-? минимумифицированный. А пониманию, как он работает, аккуратное переименование переменных и функций по алфавиту не мешает. Разведчиков учат уходить от погони, включая правый поворот — поворачивать влево. Так что лучший способ обфускации это применить данный метод к названиями функций и переменных. )))

Когда мы пишем защиту от взлома, или обман сканера антивируса, то очень много внимания уделяется, как не показать те функции, которые мы дергаем в системе, и запутать в структуре данных, которые модифицируем. А как раз это в браузере — на блюдечке.

Скопировать код можно и миними...-? минимумифицированный. А пониманию, как он работает, аккуратное переименование переменных и функций по алфавиту не мешает.
Даже дремучий яховский компилятор, оптимизирует код, а адвансед минимизаторы так вообще преобразовывают в абсолютно другой.
Угу, вот сделал я игрушку, запостил, а её у меня содрали. Код то открыт. Люблю джаваскрипт!!!
:)) Хм, вот как, значит, коммунистические идеи (open source) Вам не по нутру.

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

Публикуем код, пишем авторство, не забудем поблагодарить всех гигантов до нас, на чьих плечах мы стояли — и это теперь наша личная собственность. Как квартира, комп, машина, яхта... Или не публикуем, играемся сами. Или дарим как есть.

Но в целях принесения пользы всему обществу, по концепции коммунизма-open-source, желательно ее принести.

(это я в плане наброса... есличё)))

Неа, не по нутру мне коммунистические идеи — при коммунизме полно желающих не работать

а как быть с пособием по безработице в тех же вполне некоммунистических США?

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

Израильский вариант? Тебе платят пособие и до двух раз находят работу. Если после второго вылетишь — прощай халявные денежки.

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

Импортировать в Штаты евреев? *Нужно больше золота* ©

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

Когда происходило становление рынка игрушек в соцсетях (фермы, города, майбруты всякие и т.д.), то было массовое клонирование, копирование и просто воровство. Примеров очень много.
Яваскрипт защищать еще сложнее, чем флеш. Поэтому «жлобство» — это не жлобство, а желание защитить свою собственность.

У бегемота плохое зрение, но при его весе это не его проблемы
JS есть во всех браузерах и ему пофиг что вы о нем думаете

JS есть во всех браузерах и ему пофиг что вы о нем думаете

Тимати-стайл? :)

Дык поэтому UNIX — прекрасная оперционка, которую никто не использует. Думаю, что вес JS начинает уже катастрофически снижаться.http://www.google.com.ua/trends/explore#q=JavaScript%20Programming%20Language%2C%20%2Fm%2F0jgqg&cmpt=q

То есть, что вам нравится в JavaScript, не имеет никакого отношения к самому JS, а только лишь к тому, что вы можете посмотреть чужой код в браузере?
Вообще то, если не ленится, и пойти чуть дальше браузера, то можно найти много опенсорсного кода на других языка.

что вам нравится в JavaScript, не имеет никакого отношения к самому JS
Ну да. Как говорят, программист на Фортране пишет код на любом языке, как на Фортране. Палочкой вы размешиваете кофе, или ложечкой, но подсознательно весь ритуал вы проделаете одинаково.

Многие не замечают интересную вещь. «Как мы программируем?», — ответ лежит на поверхности окна браузера. Именно, в браузере нельзя спрятать, кто на что учился и кто что напрограммировал.

Вы будете программировать так, как вы понимаете совместную работу устройства и способа управления им. Язык здесь не имеет значения. Вы будете водить машину, или велосипед, или идти пешком, так, как понимаете объективные установленные правила движения, и здравый смысл + способ, как дойти до нужного места, а этим владеют даже животные. Если вы прежде чем войти в дверь магазина трижды приседаете и делаете «ку!», то эта же психическая девиация заставит вас попробовать проделать то же самое на автомобиле при въезде в гараж. Выражаться это может в другом, например, три раза «фа-фа» клаксоном, не суть...

Все эти «ку!» хорошо наблюдаются в браузере. Web-страничка конторы по программированию это открытая дверь, чтобы заглянуть, как там понимают программирование.

Вы случайно не гуманитарий?

Человек пишет код так, как он умеет используя доступный ему инструмент, и в зависимости от того как хорошо ему инструмент знаком. Разные языки и API — разные инструменты, разные возможности. Даже если он переносит какие-то подходы известные ему с одного языка на другой, он не может писать абсолютно также, если язык отличается от предыдущего, особенно если в нем представлены совершенно другие парадигмы. Мало того, люди со временем меняют стиль, изобретают/изучают новые способы решения старых и новых задач, лучше знакомятся с языками и API.

Вы хотите сказать, что вы в браузере можете видеть то, какие подходы для решения задач используют другие люди и видеть их стиль? Что ж чудесно, но зачем что бы это объяснить, писать столько бреда, про размешивание кофе, и прочее?

Но опять же, какое отношение это имеет к JavsScript? Вы сами пишите, что язык не имеет значение, но тем не менее пост называется — «Чем мне нравится JavaScript» Тогда он должен называться — «Мне нравятся клиентские скрипты, потому что можно посмотреть чужой код», хотя я не знаю какой в этом посте смысл тогда, но нравятся — ок.

В добавок, если вам хочется видеть как другие люди пишут, то я же говорю — идите на github, codeplex, googlecode. Или вам нужно видеть код написанный конкретными фирмами? Хотите критиковать их, или радоваться их гвно коду?

Ещё открою вам секрет, если приложения написаны на .NET, они очень легко декомпилируются в полноценный код на C# или VB .NET или даже Delphi .NET.
Для Java тоже в принципе существуют декомпиляторы, может не такие эффективные, но все же. Кто вам мешает смотреть код на C#?

Человек пишет код так, как он умеет 
— Это должно быть написано на дверях каждой программирующей конторы ))), как и в баре: «Просьба к посетителям в пианиста не стрелять, он играет, как умеет».
то я же говорю — идите на github, codeplex, googlecode. Или вам нужно видеть код написанный конкретными фирмами?
Ага. А Вы проницательный! :)))

Коментар порушує правила спільноти і видалений модераторами.

imho JS сродни высокой моде. там полно всех этих нетрадиционно ориентированных гуру-модельеров, штампующих одежку исключительно для подиумов, абы выпендриться. носить результаты их творчества непрактично, неэстетично и безумно дорого. тем не менее они существуют и оказывают свое негативное влияние на социум. с каждым днем все труднее найти эту простую практичную и недорогую одежду (где купить нормальные, непи*ерастические джинсы?).
возвращаясь к JS, вам никогда не встречался результат работы над фронтендом команды из пары десятков прожженных бэк-эндщиков (студентов, домохозяек — нужное подчеркнуть)? эта адская смесь каких-нибудь dojo, jquery и «идите все нафик, я напишу свой личный фреймворк» — в общем, не стреляйте в пианиста, он играет, как умеет.
и вуаля, пара-тройка мегабайт pure JS на страничку, тыщщи ajax запросов «пока все это загрузится», потом навешиваем глобальные onClick, onMouseOver, onBlur etc. по именам классов css и наслаждаемся. точнее, удивляемся, почему броузеру нужны гигабайты оперативки, почему он отъедает половину ресурсов процессора, в конце-концов, почему на моем i7 c 16GB RAM этот сайт так ужасно тормозит?
непонятно почему, но практический каждый веб-девелопер считает свои святым долгом обвешать фронт-энд максимально возможным количеством свистелок, забывая при этом, что главное в любом ресурсе — контент и удобство его извлечения. лично я убежден, что именно JS в обозримом будущем приведет к смерти броузеров. именно. browsers must die! because of JS. будущее за приложениями, доставляющими контент потребителю наименее ресурсоемким и наиболее комфортным способом.

Недавно сократили minified js файл на DOU с 336КБ до 180 :)

Было web app с JS порядком ~1MB, и все очень даже быстро работало, естественно время загрузки было не самым быстрым, но исключительно в первый раз.

Да, зависит не столько от размера, столько от самого кода, одна «плохая» строчка может тормозить больше, чем тысяча «хороших». На ДОУ было довольно много просто лишнего JS кода, который нигде не использовался.

JS не виноват что на нем педалят люди без experience & skills in JS.

Я говорю о том, что не надо ругать язык, из-за того что его неправильно используют.

А за то что язык позволяет неправильно себя использовать, ругать можно?

Любой язык можно не правильно использовать, первый кандидат C++, но не спорю, он тоже сильно критикуется из-за этого. Но можно так же писать криво и на Java.

Но можно так же писать криво и на Java.
В том то и дело, что ТАК ЖЕ криво на Java писать нельзя. На C# - тоже, хотя там порог выше, за счёт недовыпиленых goto и unmanaged. Ну а в js этот порог улетает в стратосферу.

Вы не видели что пишут на Java люди которые на него приходят из PHP, или просто джуны? А на C# я видел самый большой говнокод в своей жизни, и писал его Middle C# Developer.

Видел. Не идёт ни в какое сравнение с тем, что я встречал на C++. Там, хотя бы, не приходилось возится с памятью.

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

Разумеется, вот только где то проблема стоит остро, где то нет. В js — острее некуда.

nразница в том, что за счет статической типизации в джавовском омнокоде закатав рукава, и зажав нос — можна разобраться. (исключение только обильное использование рефлекшенов). В омнокоде на джсе разобраться без ущерба для психики — нельзя.

А вы знакомы с JSDoc/JSDuck? Jasmine/Selenium? Это помогает с проблема типизаций. А Ember.js/Angular/Backbone/ExtJS? Это помогает избегать говнокода.

Не считая екстжса — Нет.И ни один из аффтор жсов, с которыми (с жсами) мне приходилось работь, небыл с этим всем (кроме екстжса) знаком. И о чем это говорит?

Ну во первых далеко не все умеют даже с екст джс работать. А говорит это о их личном уровне.

Дак суть не столько в том, что хороший программист плохого кода не напишет. Суть в том, чтобы как можно больше связать руки плохим программистам.

JS — второй язык программирования у 99% не JS девелоперов, связанных с вебом и выводом в броузер. эти люди не столько хотят, сколько вынуждены его пользовать. большинству

experience & skills in JS
и даром не нать, ведь главное — чтобы баг был пофикшен, неважно, красиво или нет. именно такие люди (я в том числе) плюс студенты и домохозяйки вырабатывают в день больше гуано-JS кода, чем все вместе взятые JS-гуру за год. а значит среднее качество JS продукта всегда будет ниже плинтуса, тяжело тестировать, тяжело поддерживать... короче, язык обречен )) хотя некоторые еще пыжатся, создают новые фреймворки, и даже операционки, где JS — основной язык разработки приложений. лишь ускоряют приближение конца. имхо, конечно

Есть стандарт js 2 с опциональной строгой типизацией. Вдруг поможет.

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

Бог с ним, с прототипным наследованием, иногда оно крайне удобно. Меня лично выбешивает исключительно типизация и море безумных условностей.

Меня лично выбешивает исключительно типизация
Такое на форуме обяснять сложно, если кратко, то «оно вам не нужно», это просто другой инструмент и надо учитсо им пользоваться.
море безумных условностей.
Не понимаю, поясните.
Не понимаю, поясните.
Несколько примеров. Переменная объявляется где угодно, но может использоваться раньше чем объявленна, причём при первом использовании равна значению, которое дальше используется для её инициализации. С var мы объявляем локальную переменную, без var глобальную, и никто ничего не скажет. В метод можно передовать любое число параметров (некоторые этим пользуются — убивать). И там такого море.

Такое впечетление, словно Сишный синтаксис не столько улучшил, сколько испортил язык.

никто ничего не скажет

Может JSHint?

Переменная объявляется где угодно
«всплытие» var, ага.
причём при первом использовании равна значению, которое дальше используется для её инициализации
ась? разве
(function() {
alert(a);
var a = 5;
})()
выведет 5?!
В метод можно передовать любое число параметров (некоторые этим пользуются — убивать)
в смысле, претензии к случаю, когда фактических параметров > формальных или наоборот?

Вот вам ещё забавный гoвнокод:

var v = “Hello”;

setTimeout(function() {
alert(v); // покажет “World”, а не “Hello”
}, 1000);

var v = “World”;

Нубы срут кирпичами :)

Можно второй var и не ставить

месье открыл для себя замыкание? а месье в курсе, что это изобретено задолго до JS?

А месье не мог подумать, что другой месье не диву даётся от кода писанного, а падавану не от JS дива заморские демонстрирует? :)

окей. не подумал :)
со своей колокольни: офигеваю от идеи использовать арифметику на указателях без специального синтаксиса. и дерево классов-стратегий в противовес миксинам. и дженерики падавана не от .NETJAVA(конечно же) вгоняют в тоску.

тогда предлагаю такой трюк:

var oldSend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function() {
alert("Задолбали своим AJAX'ом!");
oldSend.apply(this, arguments);
}

А с чего бы ему тут Hello вывести? В каком-то языке выведет? Если провести аналогию, то v — это глобальная переменная, паблик статик если хотите, а вызов алерта происходит в отдельном потоке с задержкой, всё логично. В общем наезда не понял
Вот так выведет Hello:
var v = "Hello";
setTimeout((function (v) {
return function () {
alert(v);
}
})(v), 1000);

Забыл ещё добавить: в том же похапэ, который юзают %99.99999 пищущих на JS людей, аналогичный код будет работать иначе, и выведет это ваше «Hello»;

$v = «Hello»;

call_user_func(function($v){
echo $v; // Покажет «Hello»
}, $v);

$v = «World»;

Собственно, вышеозначенное не есть труэ-вей замыканием, в 5.4 ввели их более юзабельный вариант, но всё же. Как известно, пыхомакаки обычно не представляют себе такого понятия, да и знакомятся с JS после PHP. Так что, даже если они и сталкивались с такими штуками ранее, то их «необычное» поведение в JS может сбивать с толку. Собственно, это я и хотел сказать изначально.

С var мы объявляем локальную переменную, без var глобальную, и никто ничего не скажет.
Стрикт мод + прочитать книгу по основам языка и о том что такое переменные :)
Вот этот человек twitter.com/...DmitrySoshnikov много пишет (писал) на эту тему, там все логично.

Так я знаю почему так происходит. Читал когда то Флэнагана. Но более отстойным от этого сабж быть не перестаёт.

Вообще мне кажется, что если внести несколько измений в синтаксис (скажем, обязать объявлять переменные перед методом, а ля Дельфи) и сделать типизацию построже — язык стал бы гораздо логичнее.

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

Хотелось бы уточнить когда это произойдет ? через 1 — 5 лет, через 5 — 10 лет, через 15 — 20 ?

все зависит только от нас самих — будем ли мы держаться за эти архаичные пережитки прошлого (броузеры и JS c ними) или скажем решительное нет. нужно всего лишь создать альтернативу (кто там искал идею для стартапа?). ну или подождать, пока появится новый бил гейц / стив жобс с долгожданным «кому теперь нужны эти броузеры?!» ))

А что вы предлагаете взамен? Специализированные приложения?

Ну альтернативы давно есть, это всякие жвм с жаваэфикс, моно с сильверлайтом, да влеш с еиром. И все они почемуто умерли :-(

Click

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

Чтобы писать качественные приложения на JavaScript его необходимо хорошо знать. А судить о языке после того как вам попалось в коде 2 вложенных callback’а или еще какая то неявная особенность, и только потому что в вашем языке java/c#/php/etc. такого раньше не встречалось — ну это не аргумент. Приведите пример что вас волнует в этом языке, и я уверен что в www, не мало хороших JS Разработчиков, которые могут пояснить то или иное поведение.

браузерах, и наверное не напрасно
 Це з жанру помилки молодості дуже важко виправляти і з ними приходиться жити.
В js адская, совершенно невменяемая слабая типизация и море условностей. За что её любить?!
Переходи на сторону хипстеров юзай CoffeeScript

У них нашлась совершенно замечательная страничка-агрегатор:
List-of-languages-that-compile-to-JS
В зоопарке присутствуют просто отпадные зверушки )))
Как я понял, у них там даже эпитеты закончились, в ход пошли вроде UglifyJS

А мне не нравится:
— Многопоточности нет,
— Jit-компиляция только в Хроме
— эффективных библиотек для чего-то более как отображения табличек и часиков даже менее чем для Delphi,
— эффективной поддержки 2D, 3D с аппаратным ускорением нет, точнее есть(WebGL) но он не особо работает.

В общем JavaScript — язык уровня школьного бейсика.

— Многопоточности нет,
есть, хоть и извратная
— Jit-компиляция только в Хроме
в фф тоже есть
— Многопоточности нет,
Есть, но не надо.
— Jit-компиляция только в Хроме
Есть во всех современных движках (даже в ИЕшном)
— эффективных библиотек для чего-то более как отображения табличек и часиков даже менее чем для Delphi,
Для УИ — дох и более, для сервера — веб-уровень уже есть, то что ниже делают по мере необходимости. Вы бы уточнили чего именно нет?
— эффективной поддержки 2D, 3D с аппаратным ускорением нет, точнее есть(WebGL) но он не особо работает.
Тут не специалист, поэтому подробнее что не работает?
В общем JavaScript — язык уровня школьного бейсика.
Но только почему-то большинство разработчиков не могут его освоить. С...ка, почему??? (эт не сарказм)
Но только почему-то большинство разработчиков не могут его освоить. С...ка, почему???

Может как раз потому что считают языком уровня бейсика, потому что порог входа ниже некуда и готовых copy/paste/refresh решений больше, чем в других языках.

потому что порог входа ниже некуда
Так я говорю про, вроде бы, бы опытных джавистов/дотНетчиков/пхпшников и тд.

Так в JS тоже нужно «вхождение», ведь опытный дотнетчик, например, может вообще не знать что такое JavaScript, но добавить в свой проект каких-то библиотек, и вызовов просто, а желание вникать как сделать хорошо и как оно работает может и не возникнуть.

+1 Вот мне прям сейчас нужно форму екстжс пренашлепать, а желание этим заниматься — нет совсем.

Многопоточность есть, учите матчасть)

эффективной поддержки 2D, 3D с аппаратным ускорением нет, точнее есть(WebGL) но он не особо работает.
а каков смысл требовать от браузера полной аппаратной поддержки 3Д?..
из трехмерок — three.js очень даже интересна, развивается постепенно

Сколько злых слов в адрес JS....
Господа, если вы везде суете callback и пытаетесь все делать через анонимные функции, то это не самый хороший подход. На Java быдлокодить тоже можно.
Так что собственно это больше вопрос подхода.
А так JS прекрасен, если использовать фреймворки, а не только либы типа jQuery, и писать костыли и велосипеды.

А реально чем отличается на текущий момент Firebug, Dragonfly, WebInspector, IE. Раньше пользовался Firebug, сейчас почти 100% пользуюсь WebInspector.

Тормозами. Дебажить что то, написанное, скажем, на ExtJS, нормально получается только в WI.

Например IE помню требовал для подключения дебага перезагружать страницу.

В нем самый отстойный дебаггер. Самый!

За один тільки callback hеll цьому язику місце в найнижчому рівні пекла.

За один тільки callback hеll цьому язику місце в найнижчому рівні пекла.
А при чем тут язык? Не умеешш, не лезь.

Да с радостью не лез бы в него.
Только если открыть любую вакансию на DOU, мы увидим «джаваскрипт аджакс джкьюэри».

Только если открыть любую вакансию на DOU, мы увидим «джаваскрипт аджакс джкьюэри».
Тада учитесь пользоватсо :)

Та лан, сервер-сайд разработчики, еще, иногда, требуются.
Хотя конечно жаль, что гвт так и не выстрелил :-(

Звичайно, людина легко пристосовується до всякої херні.

Это не язык, это то, как на нем пишут. Из-за низкого уровня входа и массы разработчиков с поверхностными знаниями языка, которые порождают лапшу из обратных вызовов в соусе jQuery-стайл, и возникают подобные мнения.

Ви знаєте для рюшечек і Вау ефектів мова програмування просто супер.
Для, складної логіки наприклад кліента чата не дуже.
Особливо, коли події дуже багато і вони взаємозв’зані і чат працює 24\7.

Хоча

callback hеll
квіточки. Саме погане — крива модульність, яка робиться через костилі і палки.

Для сложной логики, например, работы с событиями, есть как минимум стандартные паттерны. Если код настолько усложнен, что его сложно поддерживать, то это уже проблема архитектуры и/или реализации, но все еще не языка.

Проблема кривой модульности — это отсутствие нормального механизма разрешения зависимостей, я правильно понял мысль? Тут сложно спорить, однако существующие «костыли и палки» более-менее позволяют на это обращать минимум внимания.

ЗЫ. Это что же должно быть в клиенте чата, что его логика считается сложной? :)

Это что же должно быть в клиенте чата, что его логика считается сложной?
Я теж так подумав спочатку. Але все почалось коли мені сказали треба як у skype... і тут понеслось.

Звичайно я не пішов в лоба і не почав писати на чистому jquery... requeryjs і AMD + backbonr наше все... але, але... костилі вони і Африці костилі.

может, подробностей отсыпите? что значит

треба як у skype... і тут понеслось.
?
Открыл страницу, поставил бряк, и погрузился...
Запустил приложение, поставил бряк, и погрузился...
К слову, в сложных случаях (при хотрой загрузке скриптов), то что вы описали может не сработать.

Попробуйте Dragonfly. Первым смотрю именно в нем. Поэкспериментируйте — проверьте, что в закладке нет ни одного бряка (оцените на этой вкладочке возможность поставить бряк на событие, не зная, кто его исполнит). Затем активируйте кнопочкой break on first statement. Перед тем как что-либо будет исполнено на загружаемой странице, мы попадаем в browser.js , который написали ребята из Оперы (если ставили еще и свой, user.js, то подхватывается и он). В них переписывается любая глобальная функция, перехватывается любой обработчик, до загрузки на исполнение первого байта тела http-ответа. Это надо видеть. Как ребята из Оперы ломают и переписывают странички еще до их загрузки. Кстати, и от корпораций добра тоже, которые защищаются, специально пиша так (это правильно сейчас я написал?), что конкретно в Опере их вебсервисы отказываются работать. Только расово правильный Хром или Сафари, да )) Комментарии тоже доставляют, но года два назад их было больше и они были веселее.

Некуда там хитрой загрузке спрятаться...

Некуда там хитрой загрузке спрятаться...
И эвалы по адаксам, он так же будет нормально дебажить? И скомпиленые микро-темплейты?
Попробуйте Dragonfly.
Смыслу если есть куча других техник, которые работают в майнстримовых (тех которыми пользуютсо люди) браузерах?

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

Но я акцентировал в стартовом сообщении, что JS это средство интроспекции способа написания кода у коммерческих разработчиков. То есть, чуточку шире, чем интроспекция собственно JS. Так что обнаружение eval будет говорить о многом )))

А теперь еще раз, так шоб я понял о чем вы.

Я видимо, не понял, в чем затруднения. Оценка «нормально дебажить» может варьироваться от субъекта к субъекту, или объективно что-то есть?

или объективно что-то есть?
Таки обективно. Для оптимизации загрузки и/или корректной загрузки инлайн скриптов, часто приходится пользоваться евал-ом, что может отменять те вещи которые вас повергли в такой восторг (простота отладки), на сколько я понял.

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

Только что проверил на самомодифицирующемся коде, Драгонфлай показывает eval как отдельные скрипты в списке скриптов, позволяет там внутри ставить бряк, заходит в eval и идет там пошагово. Каким способом мы подменим строку, прежде чем сделаем eval, значения не имеет.

Мне не столько простота отладки JS кода, (правильно назвать это интроспекцией) показалась привлекательной, сколько интроспекция того, как пишут код в компаниях и что считают допустимым. Некоторые не желают открывать свой код не потому, что скупердяи, а потому что показать стыдно. Но здесь деваться некуда. А мы смотрим )))

Ага. Просто иногда низзя юзать.

Перформанс. Мы тут на vanilla js собираемся все писать )
Так сказать нам пофигу до кросс браузерности. У нас будет ровно 1 платформа.

есть куча штук, которые заявляют производительность выше. zepto.js тот же, mootools(custom build), atomjs

Перформанс. Мы тут на vanilla js собираемся все писать )
есть куча штук, которые заявляют производительность выше. zepto.js тот же, mootools(custom build), atomjs
А они не заявляют, каким таким образом? Ссылки приветствуются.
Перформанс. Мы тут на vanilla js собираемся все писать )
Помимо кроссплатформанности во всяких фреймворках есть еще и кеши и утилиты, которые надо будет переписать самим и поддерживать.
Собственно деферред был одним из моментом почему мы использовали джКвери, а не зепто.

что сказать: “Politics, man! It’s a fucking politics”.
Я бы на TypeScript спрыгнул вообще.

В js адская, совершенно невменяемая слабая типизация и море условностей. За что её любить?!

За то и любим. Адский язык :)

А в чем конкретно проявляется невменяемость типизации в js?

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

В js она настолько слабая, что её считай нет. Единственный способ не погореть — просто выучить что во что превращается в разных типах.

Это для вас она слабая, динамическая. А для чотких джава пацанчиков, чщетно клачающих контролом в иде, и пытающихся понять что там за херня приходит в калбеке, и как ей пользоваццо: она (типизация) — оцуствует.

Ну так а в чем проблемы собственно? Другой язык — другие принципы. Вон в PHP динамическая типизация не помешала весь интернет заплодить PHP сайтами

Ибо с динамической типизацией легче писать =)

Тем, что не надо срать кирпичами, когда язык говорит, что 1.0 не равно 1? Особенно, когда это происходит в рантайме, где-нибудь в Integer.parseInt(), скажем, из-за смены либы, жмущей данные в JSON? :)

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

Я не асилил понять причем тут типизация.

Я огорчён.

такое и в языке с статической типизацией можно намутить.

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

Пример с либой — не надуман, а действительно имел место быть: старая либа 1 представляла как «1», а новая — как «1.0».

Я огорчён.
Согласен, тебе есть о чем огорчаться.
Но в «динамических» языках такое происходит не чаще,
Происходит что? Попробуй в петончеге сделать такое, получишь такой же результат. Это разница не в статической-динамической типизации, а в быдло и небыдло языках.
Пример с либой — не надуман, а действительно имел место быть: старая либа 1 представляла как «1», а новая — как «1.0».
При чем тут либы? В джаваскрипте нельзя такие же либы написать?
При чем тут либы? В джаваскрипте нельзя такие же либы написать?
Вообще то нельзя. js мастер переводить что угодно во что угодно. И хорошо если это 1.0 в 1, а то ведь всякое бывает.

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

Я не о том. Скажем, если метод раньше возвращал флоат, а стал возвращать инт, то в js никто и не заметит.

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

В виду особенностей динамической типизации, а конкртено, того, что она, етить её, динамическая, такие языки определяют свой подход в написании кода на них. Если вы всю жизнь грызли кофе, а потом перешли на ЖС, то не надо гнуть тут пальцы и говорить, мол, как же ж так, нету эксепшена при смене типа, ататат. Это значит, что вы просто не освоили инструмент так, как он того подразумевает. А подразумевает он, точнее, его идеология, какраз и не обращать внимания и, больше того, использовать (!) такие особенности, как равенство 1.0 и 1.

UPD: пардон, отвечал не Вам, а тов. reality_hacker`у.

В виду особенностей динамической типизации, а конкртено, того, что она, етить её, динамическая, такие языки определяют свой подход в написании кода на них.
Я привел питон с питончигом, так что типизация тут непричем.

Это кстати помойму, свойство не «динамической» типизации, а «слабой».

Я не о том. Скажем, если метод раньше возвращал флоат, а стал возвращать инт, то в js никто и не заметит.
Вам надо по содержанию или по внешнему виду?
Если по внешнему виду, то зачем?
Если по содержанию, то какое ваше дело инт там или флоат, главное чтобы ваш код умел с ним работать. То есть важно чтобы принимаемые объекты поддерживали протокол, это и надо проверять.
Не понял, в дж скрипте в либе я не могу проверить входную строку регекспом и кинуть эксепшн если там точка есть?
Вообще то можно, но я ещё не встречал джедаев, которые так делают.
А че тут джедайского?
А че тут джедайского?
А так делают? Не встречал таких.
Не встречал таких.

Щас Вам расскажут, что Вы просто не видели хороший код\программистов\сиськи_семенович :)))

Может и не встречал. Зато встречал массу товарищей, которые лепят стринги в арифметику. А js всё равно, оно приводит...

Сегодня утром на ДОУ был баг, что
Python считает 21/5*31 как 124 а не 130,2
тоже казалось бы Python плохой и виноват в глюках...

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

js — способствует.

А так делают?
А как вы по другому проверите является ли число целым? Еще есть вариант с «~~», конечно же.
Скажем, если метод раньше возвращал флоат, а стал возвращать инт, то в js никто и не заметит.
В джава скрипте нет, в питоне да, т.е. это иррелевантно типизации.
Согласен, тебе есть о чем огорчаться.

Ну, да, Вы ведь не понимаете элементарных вещей в таком то почтенном возрасте :)

Попробуй в петончеге сделать такое, получишь такой же результат.

Таки да, и шо? Питон страдает теми же граблями. Или Вы к чему его тут упомянули?

Это разница не в статической-динамической типизации, а в быдло и небыдло языках.

Ой ой ой, какие Вы жосские прям. Если пройтись по няшной сишечке внимательно, то там столько говен повсплывает, что жс вам блаженной истиной покажется. Я уже не говорю об ынтырпрайзе и мобайле. Или для вас понятие «небыдло язык» — это экзотические хаскелли, лиспы и эрланги, на которых пишут тру-математик-куны? Тогда Вы, батенька, не на том ресурсе зависаете :)

При чем тут либы? В джаваскрипте нельзя такие же либы написать?

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

Ну, да, Вы ведь не понимаете элементарных вещей в таком то почтенном возрасте :)
Ну давай еще поиграем в эту игру: та нет, это ты чушь несешь несусветную
Если пройтись по няшной сишечке внимательно, то там столько говен повсплывает, что жс вам блаженной истиной покажется
Не будь голословным, примеры в студию, ну и си как для языка с 40-летней историей неплохо держится вроде.
В жаваскрипте в виду его динамической сущности такой проблемы, как я описАл выше, не возникнет в принципе, либы были лишь иллюстрацией для этого факта, не цепляйтесь к ним.
Это не проблемы, а как раз их отсуствия, и причина не в «динамической сущности», а в кривом дизайне библиотек.
В том, что NaN — это число.
А что с этим не так?
en.wikipedia.org/wiki/NaN
Это по сути общий компьютерно-математический принцип который и имплементировали в javascript. Он был задан стандартом IEEE 754

Вы знаете много людей, которые читали IEEE 754?

А зачем ее читать? В википедии все прекрасно и понятно описано. Если вы не понимаете что такое NaN то это не проблемы языка

Я понимаю, что это. Проблема в том, что в *таком* языке, как JS, есть вообще такое понятие, которое там никуда не упёрлось. Претензия, собственно, и была предъявлена именно по этому поводу.

Я согласен в том что необоходимость в NaN довольно таки сомнительна, тем не менее она является стандартом IEEE floating point и это не какие-то выдумки авторов javascript. Хотя в том же MathLab этот самый NaN может быть полезным.

Я согласен в том что необоходимость в NaN довольно таки сомнительна
И что должен возвращать
parseInt("dsadad")
?
Exception? ;)
Усложняем задачу:
0/0
Exception
С чего бы это? Почему не 1?

С каких пор можно делить на ноль?

ru.wikipedia.org/...определённостей хотя конечно это не к орфографии цепляться

тут не много лучше, но не по нашему en.wikipedia.org/...ivision_by_zero

Не идентично. В пределах параметр стремится к нулю, но не является им.

en.wikipedia.org/...ivision_by_zero
это русская вики, там мало

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

It is generally regarded among mathematicians that a natural way to interpret division by zero is to first define division in terms of other arithmetic operations. Under the standard rules for arithmetic on integers, rational numbers, real numbers, and complex numbers, division by zero is undefined. Division by zero must be left undefined in any mathematical system that obeys the axioms of a field. The reason is that division is defined to be the inverse operation of multiplication. This means that the value of a/b is the solution x of the equation bx = a whenever such a value exists and is unique. Otherwise the value is left undefined.

например the problem by defining (in modern notation) .[1]

Я знаю что такое предел без вики)

lim(n->0)1/n != 1/0

Потому что в первом случае n!=0. Оно бесконечно близко к нему, но всё таки не ноль.

Значение лимита который ты выписал — бесконечность, 1/0 тоже можно определить как бесконечность.
Единственное к чему ты можешь апелировать это что значения твоего лимит равно + или — бесконечность в зависимости от того приближатся к нулю с лева или с права, но мне кажется ты не это имел в виду, и эту проблему тоже можно обойти.

Значение лимита который ты выписал — бесконечность, 1/0 тоже можно определить как бесконечность.
Это всё приближения.
Единственное к чему ты можешь апелировать это что значения твоего лимит равно + или — бесконечность в зависимости от того приближатся к нулю с лева или с права, но мне кажется ты не это имел в виду,
Не это, но, кстати, хорошее замечание.

Но возвращаясь к js, ну пусть 1/0 == Inf, а 0/0 == NaN. Это просто не нужно в 99 случаях. Зато удобного эксепшена, который сигнализирует о проблемах мы не получим.

Это всё приближения.
Какие такие приближения? Значение лимита это величина к которой стремится последовательность под знаком лимита, и здесь она именно бесконечность.

Да. Приближение — считать что lim(n->0)1/n == 1/0.

Я свои соображения почему это не приближение привел, а твои какие? Или где ошибка в моих размышлениях?

Ошибка в том, что n стремится к нулю, оно бесконечно малое, но нулю оно не равняется. Иначе говоря, n — это бесконечно близкое к нулю число, а не сам ноль.

Ну так а значек лимита и обозначает ту величину к которой стремится последовательность внутри. Ты б подучил матан что ли..

Так стремится, но не становится ею ни при каком исходе. Аналогично.

Последовательность да стремится, но когда ты навешываешь на нее значек лимита, то выражение начинает обозначать число к которому стремится последовательность. В данном случае это бесконечность.

Слушай, ты понимаешь разницу между нулём и бесконечно малым числом?

С / B = A => A * B = C

В стандартной арифметике на ноль делить нельзя:

B = 0 , C <> 0 : C / 0 = A => A * 0 = C !

Другое дело, бесконечно малое число:

B = 0.0...01: C / 0.0...01 = 999...999 (бесконечно большое число).

Короче говоря, в пределе ты получешь не ноль, а это самое, бесконечно малое число. Можно считать, что бесконечно малое число и ноль — одно и тоже (как в IEEE 754), но это натяжки.

А что в твоем понимании стандартная арифметика? Подозреваю в ней и бесконечностей и лимитов тоже нету, не говоря уж о бесконечно малых.

Есть. В ней нет комплексных чисел, но они к сабжу вроде не относятся.

Так что за «стандартная математика» такая? Если посмотреть на классическую аксиоматическую терию действительных чисел ru.wikipedia.org/....81.D0.B5.D0.BB то там нету ни бесконечности, ни бесконечно малых. Ну и можно какую то ссылго в студию где твой лимит равен чему либо другому окромя бесконечности?

Пипец!!! Лимит равен бесконечности, ей не равен 1/0.

Ок. Так а ссылго на «стандартную арифметику» с бесконечностью и бесконечно малой величиной будет и где нельзя делить на ноль? Или это плод твоего воображения в котором ты как хочешь так и крутишь?

Не будет. Так наш универский препод называл некомплексную арифметику, а я просто перенял привычку.

Ок, а что конкретно такое «некомплексная арифметика»? Какую именно аксиоматическую теорию ты имеешь в виду?

не совсем, мысль была в другом, например у вас подобного рода вычисления

x = (a/0 + 1) * (0/b) = a/b, аналитически и через пределы это выводиться и деление вполне себе умесно

кстати вот еще мнение mathworld.wolfram.com/...sionbyZero.html
они правда говорят про комплексные числа, но не отрицают что деление на 0 порождает неопределеность, а как существование бесконечного количества вариантов так же как и уравнение x + y = 1, но это не означает что оно не существует или так нельзя, тем более что для случаев как я вам привел если забыть про запреты можно вполне себе получить значение ведь y = a это может быть и y = ax / x и как тогда у нас со значением в точке 0?

www.google.com/...20&bih=1112

С каких пор можно делить на ноль?
А на бесконечность можно? В общем таки почитайте ИЕЕЕ_какую-то_там в ней вся эта дискуссия повторена, так и получилсо НаН :)
Тогда уж −1.
И такое возможно :)

У JS есть преимущества, гибкость — возможность менять объекты на ходу, оперировать функциями как объектами, принимать что угодно в качестве аргументов функции, и возвращать что угодно в качестве результата.
К примеру, из метода можно возвращать совсем разные комплексные объекты в зависимости от ситуации. Присваивая однообразным объектам разные функции в качестве атрибута можно получить своеобразный полиморфизм без наследования. И так далее.
Но да, за это нужно платить отсутствием строгой типизации и статичности, а значить отсутствием нормальных подсказок в IDE.

Разве что кто-то додумается сделать IDE которая могла бы постоянно выполнять код, и определять все возможные состояния объекта в конкретном точке (в том числе с учетом ветвления).
И любовь к firebug и подобным консолям в бразуере, происходить именно от того, что это единственное место где можно реально попробовать и посмотреть на объекты в живую, так как из-за динамичности языка (ну ещё из-за разных реализаций рантайма), в редакторе кода вряд ли можно получить внятную подсказку по поводу того из чего объекты с которыми ты работаешь — состоят.

Дак эти все возможности есть и у пыха и у рубей с питончегом, и даж у эрланга. Но почемуто на эти языки (кроме пыха) никто так не материться как на жс =)

Почему не матерятся? Точнее не знаю зачем тут матерится, но недостатки те же есть и у других динамических языков. Но JS мне кажется, самый не строгий из них) Вот с Питоном у JS есть реально разница, JS менее строгий, а вот PHP действительно очень близок мне кажется (и на него тоже ругаются часто, но лично он мне не нравится из-за его стандартной библиотеки и API).

В любом случае, автор темы пишет бред. Собственно речь не о языке, а о том как круто что автор может смотреть чужой код в браузере. При этом, он почему то не думает что и на сервере есть значительный и важный кусок кода, без которого клиентская часть может быть и не нужной никому.
О чем вообще тут речь?
Я готов поспорить автор даже не знает свой любимый язык нормально, со всеми его хитростями, и фичами, и не понимает разницы с другими языками в полной мере.

Текст темы вызвал бурление Ваших чувств? Ищете, с кем бы помериться? )))

Бурление чувств вызывают у меня люди которые пишут бред. Переживаю за человечество.

Юзай typescript или script#. Там и типизация и наследование, полиморфизм, инкапсуляция. А на выходе чистый js.

А что делать если не нравится?
Эти дурацкие анонимные колбэки типа functuion(function(function(..
Никак не могу осилить прототипное наследование, вся надежда на Dart/Typescript.
Простейший пример, 15 простых строчек на typescript превращаются в 30 строк белиберды на javascript: ссылка.
JS-гуру, как этот же пример записать более компактно?

как этот же пример записать более компактно?
var Human = function()  {
return {
name: 'Unknown',
die: function() {
alert(this.name + 'died');
}
};
};

var Man = function(){
var res = Human();
res.name = 'John';
return res;
};
var Woman = function(){
var res = Human();
res.name = 'Anna';
return res;
};

Или так:
var Human = function(name)  {
return {
name: name,
die: function() {
alert(this.name + 'died');
}
};
};
И тут дело не в ДжС-гуру, а в банально, нормальном подходе к разработке: не плодить ненужных сущностей.
Эти дурацкие анонимные колбэки типа functuion(function(function(..
Ну а давать имена функциям — не? Использовать деферред — не?
А что делать если не нравится?
Попробовать писать на джаваскрипте, как на джаваскрипте, а не на пхп.

В примере метод die — общий для всех экземпляров. А у вас — для каждого свой =)

В примере метод die — общий для всех экземпляров. А у вас — для каждого свой =)
И это проблема потому что ...?

Там еще _ужас_ с инстатсофом!

В большинстве случаев не проблема. Но зачем занимать память копиями функций когда есть стандартное наследование через прототип, который лишен этого недостатка?

Кроме того, в вашем примере после создания экземпляров объекта метод die этого экземпляра не будет меняться при изменении родительского метода. В примере, данном выше (bit.ly/13DJ6eb) код ведет себя иначе. Опять-таки из-за применения наследования через прототип.

Но зачем занимать память копиями функций
ok
<blockquote>
var dieFn = function() {
alert(this.name + 'died');
};
var Human = function(name) {
return {
name: name,
die: dieFn
};
};</blockquote>
когда есть стандартное наследование через прототип, который лишен этого недостатка?
Какбэвот:
Кроме того, в вашем примере после создания экземпляров объекта метод die этого экземпляра не будет меняться при изменении родительского метода.
Какбэвот:
Кроме того, в вашем примере после создания экземпляров объекта метод die этого экземпляра не будет меняться при изменении родительского метода
а то, не дай скотч, еще отдекорируют её :)
а то, не дай скотч, еще отдекорируют её :)
Отдекорировать можно если нужно, но только новые объекты. А вот разгребать когда и где кто-то постфактум поменял поведение ваших объектов, уже не прийдется.
А вот разгребать когда и где кто-то постфактум поменял поведение ваших объектов, уже не прийдется.
не сталкивался еще с серьезными проблемами. по крайней мере, не сложнее, чем «кто-то где-то поменял значение глобальной переменной» — поиск решает.
по крайней мере, не сложнее, чем «кто-то где-то поменял значение глобальной переменной» — поиск решает.
Ну удачи :)

— Засоряется глобальная область видимости.
— Затрудняется понимание в каком контексте вызывается dieFn.

— Засоряется глобальная область видимости.
Ну про паттерн модуль мы не слышали?
— Затрудняется понимание в каком контексте вызывается dieFn.
Ну книжки по основам джаваскрипта мы не читали? Тогда откуда мы знаем про прототипы?
Кстати, ошибки связанные с прототипами чаще допускают, чем связанные с контекстом (джКвери уже всех научил)
Попробовать писать на джаваскрипте, как на джаваскрипте, а не на пхп.
Ага. И не как на Java, и не как на C# и не как на %другой нормальный язык%.

Ладно, на клиент-сайде альтернатив JS нет, но некоторые пихают это непотребство на сервера и даже утверждают, что им нравится с ним работать.

некоторые пихают это непотребство на сервера

Этим хотели бы заняться 40% разработчиков:
blog.stackoverflow.com/...survey-results

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

Этим хотели бы заняться 40% разработчиков:
Это где там такое написано?

JS пока второй язык после C# и Java на сервере который поддерживает дебаг, только ради этого можно было бы на нём писать.

php тоже поддерживает дебаг, но чет не котируется

Не стабильный этот дебаг, медленный и слетает так часто что к нему нет доверия

%другой нормальный язык%.
Фикс: другой язык который вы знаете.
Кстати, что вам мешает писать в процедурном стиле, если не хватает интелекта пользоваться всеми средствами языка?
Ладно, на клиент-сайде альтернатив JS нет, но некоторые пихают это непотребство на сервера и даже утверждают, что им нравится с ним работать.
Некоторые до сих пор пихают PHP на сервера, и ничего, жить можно
...но некоторые пихают это непотребство на сервера и даже утверждают, что им нравится с ним работать.

Пропустим слово «непотребство». А как это может не нравится? Одна только концепция объединения веб-сервера и программного кода, не уникальная для Node.js, но явно чуждая каким-нибудь PHP и Java, делает разработку веб-приложений куда более комфортной.

Или например наконец изобрести futures

Или например наконец изобрести futures
deferred/promise — это и есть что-то вроде futures.

Они не дурацкие — они божественные )

Начнем с того, а для чего нужны классы в JS? Пример Man extends Human, Women extends Human не убеждает, так как он очень теоретический. Опять же, если возмущение вызвает именно синтаксис, ничто не мешает использовать CoffeeScript.

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

Да любой JS-программист узнает обфуцированный код jQuery в дебаггере. В Хроме есть волшебная кнопка автоформатирования, и после ее нажатия как бы переменные не назывались, все равно в очертаниях методов угадываются знакомые строчки.

Всё самое шпионское содержится в модифицируемых данных, ход исполнения вторичен. )))

А мне нравится, когда код в именах переменных и функций вроде a,b,c,...,i,j,k...z
Какая чистота и порядок! ))

Может это у меня со студенческих FORTRANа и ассемблера, гм.

«И как приятно, где нас нет, какая чистота...» :)

Підписатись на коментарі