LINUX.ORG.RU

Как можно вообще писать на этой динамике?

 ,


1

3

Слегка поменялась структура данных и теперь целый день приходится сидеть и выискивать места на клиенте где поломался повязанный на нее код. Вместо того, чтобы компилятор/статический анализатор автоматом пометил бы 99% этих мест ошибкой автоматически. Ненависть!!!

Как вообще люди в здравом уме соглашаются на этом дерьме писать?

★★★★

Ответ на: комментарий от amomymous

JS для сильных, опытных программистов, которые не ошибаются

Гы


ГыГы

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

Как вообще люди в здравом уме соглашаются на этом дерьме писать?

вот уже третий час сижу вылавливаю баги.

Ну вот и поведай нам как ты на это согласился.

ya-betmen ★★★★★
()
Ответ на: комментарий от Deleted

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

Т.е. у нас есть класс А:

public class А {

  public List<Parameter> parameters;

}

Меняем его на

public class А {

  public List<Group> groups;

  public static class Group {
    public String groupName;
    public List<Parameter> parameters;
  }
}

А теперь у меня компилятор сам отловит


public void doSmth(A a) {
  log.info(a.parameters); //Ошибка компиляции
}

Nagwal ★★★★
() автор топика
Ответ на: комментарий от ya-betmen

Некому больше пока. Как позволит бюджет - наймем отдельного разработчика под морду.

Nagwal ★★★★
() автор топика

js, ненависть

что-то слишком часто я вижу эту комбинацию

reprimand ★★★★★
()

Дай угадаю. Жаба-быдло?

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

На клиенте? Да. Используется серверная структура.

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

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

А JS не только динамически-типизированный, в нем еще есть позднее динамическое связывание, прям как в смоллтоке, поэтому он такой выразительный. Для быдла это полный абзац, конечно:)

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

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

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

JS не только динамически-типизированный, в нем еще есть позднее динамическое связывание, прям как в смоллтоке, поэтому его так любят безработные акробаты вроде анонiмуса

/fixed

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

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

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

Был бы JS нормальным языком - у меня были бы на клиенте дублирующие (ну или, как вариант - сгенеренные по серверным) структуры данных. Поменял в одном месте - будь добр поменяй в другом. Иначе получишь либо А) ошибку сериализации, если забыл поменять либо Б) ошибку компилятора/статического анализатора если поменял структуры, а код нет. Но js в такое не умеет.

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

Вот после нескольких часов секса с поиском и выправлением скриптов этот пост и родился.

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

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

Deleted
()
Ответ на: комментарий от Nagwal

Отлавливаемые и локализованные ошибки возникли бы, если бы ты вместо того чтобы использовать результат JSON.parse() по всей программе, использовал бы этот результат в одной единственной функции, которая из этого жсона вынимает нужные программе данные.

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

Всё как обычно.

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

Еще раз - добавилось энное количество новых требований, в том числе и к визуальной части. Т.е. даже если бы визуалка работала со своими, отдельными структурами данных, их бы точно так же пришлось переделывать. И без статической типизации это вылилось бы в точно такой же, а то еще и больший pain in the ass (поскольку пришлось бы править еще и конвертер данных сервер <-> клиент).

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

Размазанная архитектура, видать.

Deleted
()
Ответ на: комментарий от PolarFox

Отлавливаемые и локализованные ошибки возникли бы, если бы ты вместо того чтобы использовать результат JSON.parse() по всей программе, использовал бы этот результат в одной единственной функции, которая из этого жсона вынимает нужные программе данные.

Еще раз объясняю, для не читающих тред. Поменялись требования в.т.ч. к визуалке. И структуры с которыми она работает - точно так же пришлось бы менять. С ровно таким же anal pain.

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

Но ведь за него только может последние три года взялись. До этого JavaScript был просто высером. Все пилили флеши, сервелаты, Adobe Air, JavaFX, только потом разрабы браузеров выскочили с HTML5+CSS3 и активной разработкой JavaScript и уложили всех лицом на пол. Так что с ES6 я бы сказал что они даже не «медлили», а наоборот, «неожидано подсуетились»

vertexua ★★★★★
()

Когда люди плачут по поводу потраченого времени из-за динамической типизации они почему-то моментально забывают сколько времени они сэкономили благодаря динамической типизации. Сколько времени теряешь на секс с рефакторингом и тесты и сколько времени экономишь на более компактном коде и отсутсвии сверхусложненных иерархий типов (man Scala collections) когда нужно сделать что-то нетривиальное (man Scala collections). Все это измеримые величины пост-фактум, но совершенно непредсказуемые для конкретного проекта начинаемого с нуля. У нас на работе обычно языки программирования разной типизации показывают соверешенно неожидано хорошо или плохо и потом следующую реинкарнацию приложения переписывают на что-то более подходящее в этой ситуации. Это жизнь, не вижу проблемы плакать и звать маму.

Ругать языки программирования кроме совсем неактуальных - моветон. Неактуальный язык - язык программирования в нише которого есть популярный язык который все делает лучше. Пример неактуального - Perl, когда есть Python и Ruby. Ruby и Python по отношению к друг другу пока не являются неактуальными, так как один хрен только в профиль. Пример неактуального - Fortran. С/C++ все делает лучше, включая все ниши Fortran кроме поддержки существующего Fortran кода, что не считается. JavaScript никак не попадает под неактуальный, так как в его нише много языков работающих лучше (Dart, TypeScript), но они не популярны. Потому ругать его - ругать стену, все равно пойдешь писать на нем код. Не хочешь писать - иди меняй, но потом окажешься в катастрофически малом community. Безумству храбрых поем мне песнь. Конечно pet-projects и простенькие стартапы - другое дело

vertexua ★★★★★
()

А в чем проблема-то?

Неужто ты не в силах изменения в CGI сразу же отразить изменениями в жабоскрипте?

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

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

Deleted
()
Ответ на: комментарий от vertexua

Ругать языки программирования кроме совсем неактуальных - моветон.

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

tailgunner ★★★★★
()

Анонимус имеет мнение

что ты зря размазал эту твою структуру по половине клиентской стороны. Гугли модульное программирование.

Но таки да, языки без статического анализа - дерьмо.

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

Вот что интересно, одно из наиговнейших (после пхытона) говен — це++ — чуть ли не соперничает с сишечкой! Вот как такой маразм мог получиться?

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

Анонимус недоумевает

Поменялись требования в.т.ч. к визуалке. И структуры с которыми она работает - точно так же пришлось бы менять. С ровно таким же anal pain.

Каким образом статика спасла бы тебя от этого геморроя? Структуры один фиг пришлось бы менять.

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

це++ — чуть ли не соперничает с сишечкой!

эскобар.жпг

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

Бюджет проекта крайне ограничен пока.
Как только будет бабло - наймем отдельного человека на написание морды

он таким и останется, бабла не будет
ты студент штоле?
по-моему заниматься подобными проектами себе дороже

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

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

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

Deleted
()
Ответ на: комментарий от Nagwal

на эту структуру куча логики клиентской завязана.

Вообще говоря если у тебя это структура RPC то есть API то надо какбы юзаеть ее через единую точку на клиенте, и добавлять туда версию апи - тогда при таком рефакторинге ты сможешь в эту единую точку вкорячить костыль преобразующий новую струкртуру в старую для legacy кода (а там где тебе нужна новая структура укажешь RPC коду что понимаешь новую версию API )

Deleted
()
Ответ на: комментарий от vurdalak

Типизированные языки (нет не C++) можно отрефакторить из IDE.

Deleted
()
Ответ на: комментарий от Nagwal

Код не размазан ... Но модули большие и хитровыебаные.

/0

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

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

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

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

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

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

От чего помог бы строгий режим? Не слышал, чтобы компилятор проверял типы даже в нем.

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

Ты не понял. Тебе как бы намекнули, что программист на JS обязан быть программистом по-определению, иначе он сможет родить только обезьяний код, вроде того, что родил ТС. Для жаба-мартышек это не обязательно. Улавливаешь разницу?

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

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

а понту с этого прикроватника если медсестра на вахте будет видеть браузерное глючное недоподелие которое скорее всего ещё и неверные данные будет показывать??

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

чтобы компилятор проверял

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

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

Вот такая вот веселая жЫсть у обезьян. Ну вот почему эти ыдыоты все пытаются себе на жопу приключений найти? А ведь просто надо вместо сраного сыплусплус нормальлный ЯП использовать!

Нет ЯП кроме сишечки, и керничи — пророк его!

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

От чего помог бы строгий режим? Не слышал, чтобы компилятор проверял типы даже в нем.

Представь себе мартышку

okay.jpg

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