Easyelectronics.ru

Электроника для всех
Текущее время: 18 окт 2019, 23:58

Часовой пояс: UTC + 5 часов


Правила форума


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


JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: JavaScript недоделка?
СообщениеДобавлено: 19 фев 2019, 16:45 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2028
Откуда: Киев
Странно, тут о стольких языках холиварили, а про этот нет. Надо бы накинуть :), ибо пока впечатления свежи.
Show "Предистория, можно пропустить"

Короче, понадобилось мне написать на новом для меня языке JavaScript(почему он см. под спойлером) выгрузку данных в ексель (если что, я не программист). Так-как язык си подобный, а у меня были примеры, то задача не казалась сложной. Где то за полчаса-час курения примеров, я понял что переменные надо объявлять через var, а функции через function. Вообщем-то все, а дальше я надеялся на то что здравый смысл и компилятор помогут решить проблему.
Но как водиться, даже запустившись без ошибок скрип не сработал. Из самых главных ошибок:
1. Скрипт вроде как хрустел данными, но в файле пусто. После некоторого тупления в код ошибка была обнаружена:
я добавил в объявление функции новый параметр:
Код:
function  addFile(file, length,rowCount )
{
//some code
}

А вот при вызове завтыкал добавить счетчик:
Код:
addFile(myfile, 10 )


2. Я поправил функцию выше и все заработало, но не совсем. Почему-то в выгрузку уходило не больше одного пакета (папки) зараз. Еще какое-то время тупления код, и ошибка была найдена.

Код:
function addRow(datamap, rowCount )
{

//some code
return rowcount++;

}


Как и Си JavaScript чувствителен к регистру, так что понятно, что это опечатка rowcount.

Да, это все детские ошибки, но почему, почему компилятор даже варнинг не написал???
Оказывается читаем стандарт:
Цитата:
1. JavaScript functions do not check the number of arguments received.
2. Variables declared without var will become global variables.

То есть, ошибки не ошибки, а мое не знание языка. Типа RTFM. Но ту я нахожу это
https://www.w3schools.com/js/js_strict.asp

Цитата:
The "use strict" directive was new in ECMAScript version 5.
It is not a statement, but a literal expression, ignored by earlier versions of JavaScript.
The purpose of "use strict" is to indicate that the code should be executed in "strict mode".
With strict mode, you can not, for example, use undeclared variables.

То есть надо было пройти 5 версий языка, что бы получить то что в Си было "из коробки"?! Теперь я понимаю чего в браузерах все тупит и глючит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JavaScript недоделка?
СообщениеДобавлено: 19 фев 2019, 17:07 
Старожил
Аватара пользователя

Зарегистрирован: 26 янв 2010, 21:48
Сообщения: 3965
Откуда: Звенигород
Я раза три пытался начать изучение программирования под андроид и каждый раз бросал именно из-за неудобства и слишком монстроозных конструкций получаемых на джаве.

_________________
От Парижа до Находки с водкой лучше, чем без водки!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JavaScript недоделка?
СообщениеДобавлено: 19 фев 2019, 19:14 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2028
Откуда: Киев
А подобные ошибки джава тоже позволяет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JavaScript недоделка?
СообщениеДобавлено: 19 фев 2019, 21:12 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 2411
Откуда: Китай, Пекин
нет Java такого не позволяет.
именно прям на Java пишут только самые упоротые.
остальные уже перекатились в Kotlin / Scala

наблюдаемое офигивание от JavaScript подобно моему офигиванию от Си после того как перекатился в Rust.
и причина - точно такая же . В Rust компилятор просто гений, в сравнении с любым сишным.

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JavaScript недоделка?
СообщениеДобавлено: 19 фев 2019, 21:46 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2622
Откуда: Санкт-Петербург
Увидел слово "javascript", запасся попкорном. Ожидания оправдались.
На словах Си-подобный сдержанно хихикнул (общего - только синтаксис). Но когда увидел слово "компилятор" - взоржал в голос.

В общем, программа-минимум: поставить линтер (например, eslint), освоить и пользоваться им. Eslint удобно интегрируется, к примеру, в visual studio code.

Но главное - понять сам javascript. Он, сцуко, совсем не то, чем кажется! Понять, что такое js-объект (по факту это мап, к данным в котором можно обращаться "по именам" через точку). Понять, что одна из основных сущностей в нём - замыкания (которых в Си нет). И напоследок понять, что когда его разрабатывали - никто не собирался писать на нём больше десяти строк :-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JavaScript недоделка?
СообщениеДобавлено: 19 фев 2019, 22:18 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2028
Откуда: Киев
Поставить что-то не уверен что получиться, так-как нужна интеграция с целевой прогой. Да и не уверен что СБ пропустит. Но посмотрю, спасибо.
А в остальном, я не нарекаю на сам подход, я не понимаю почему при наличии уже готовых СИ, Срр, Java авторы пошли на неявное объявление переменной, что бы потом через 10 лет липить костыль?


Последний раз редактировалось Signaller 21 фев 2019, 18:03, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JavaScript недоделка?
СообщениеДобавлено: 19 фев 2019, 23:28 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2622
Откуда: Санкт-Петербург
Линтер ставится на рабочую машинку (на которой редактируете скрипт), а не на целевую. Это просто проверялка - скармливаете ей файл, получаете кучу ошибок в нём :-). Не супер, но без него вообще пиздец.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JavaScript недоделка?
СообщениеДобавлено: 19 фев 2019, 23:29 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2622
Откуда: Санкт-Петербург
А пошли на такое объявление - потому, что это должен был быть простой скриптовой язык. В котором переменные вообще не объявляются. Когда в проге 5 строк - это работает.
На самом деле javascript гениален - изумительно простая и красивая концепция. Только для серьёзной разработки не очень хорош :-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JavaScript недоделка?
СообщениеДобавлено: 19 фев 2019, 23:38 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2028
Откуда: Киев
Ем, а как эта штука будет работать с "внутренними объектами" целевой проги.
Например в коде есть такой код:
Код:
var myElement as EA.Element;

1. Подозреваю будет кричать что нет такого объекта или нет?
2. Кстати ни в одном мануале не нашёл что Javascript поддерживает слово "as", но скрипт работает. Вообще загадка...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JavaScript недоделка?
СообщениеДобавлено: 20 фев 2019, 13:18 
Заглядывает иногда

Зарегистрирован: 15 ноя 2015, 12:11
Сообщения: 173
Signaller писал(а):
А в остальном, я не нарекаю на сам подход, я не понимаю почему при наличии уже готовых СИ, Срр, Java авторы пошли на неявное объявление переменной, что потом через 10 лет липить костыль?

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB