Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #641 (permalink)  
Старый 05.01.2015, 19:55
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

Ruslan_xDD,
так трансляторы в помощь)
Ответить с цитированием
  #642 (permalink)  
Старый 05.01.2015, 21:02
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Ruslan_xDD, в простом Object в качестве ключа может выступать только строка, а в Map или Set любое значение, включая объекты и это просто ну мега круто, юзаю уже больше года - не нарадуюсь.

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

// WeakMap выбран потому, чтобы при разрыве соединения клиента с сервером,
// оно автоматически удалилось бы и из map
var map = new WeakMap(); 

createServer(function (req, res) {
  ...

  // req - это специальный объект-подключения юзера, экземпляр класс ReadStream
  var user = map.get(req);

  if (!user ) {
    map.set(req, {
      sessionId: ...,
      ...
    });
  }
});


Цитата:
Даже если понадобится, то вряд ли заюзаю, ибо поддержка браузерами пока что плохая, и это ещё на несколько лет затянется.
Сейчас абсолютно все актуальные браузеры поддерживают: Map, WeakMap, Set (а вот WeakSet есть не везде), на ноде также в режиме --harmony всё работает.

Для фич вроде let или arrow function давно использую транслятор и сейчас абсолютно все мои разработки на ES6, а ES5 хочу забыть как страшный сон.

https://github.com/6to5/6to5

***

Конечно, многие вещи можно было делать и в ES5/3, и кажется зачем учить новое если есть старое, но это не правильный подход, ибо ES6 позволяет делать вещи объективно лучше и проще, а чтобы понять "зачем эти фичи", то нужно просто начать их использовать и понимание придёт.
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 05.01.2015 в 21:34.
Ответить с цитированием
  #643 (permalink)  
Старый 06.01.2015, 06:20
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

kobezzza, это всё очень интересно, заюзаю как-нибудь, когда время придёт.

Слушай, а как трансляторы работают? Ведь если я напишу let в старом браузере, то это будет ошибка. Полагаю, трансляторы просто парсят скрипты, заменяя let на var и т.д.? А то я в этом пока не очень понимаю. Или транслятор - это вообще не то, о чём я подумал?

Последний раз редактировалось ruslan_mart, 06.01.2015 в 06:44.
Ответить с цитированием
  #644 (permalink)  
Старый 06.01.2015, 08:24
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

Ruslan_xDD,
а на вопрос отвечает Safort из команды знатоков


Цитата:
Слушай, а как трансляторы работают? Ведь если я напишу let в старом браузере, то это будет ошибка. Полагаю, трансляторы просто парсят скрипты, заменяя let на var и т.д.?
Да, трансляторы парсят твой ES6 и хитрым(иногда не очень) образом заменяют на более громоздкие конструкции из ES5(если это возможно, конечно).
Ответить с цитированием
  #645 (permalink)  
Старый 06.01.2015, 10:34
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Ruslan_xDD, как уже сказал выше Safort, то трансляторы парсят твой код, а затем преобразуют его в ES5/3. По такому же принципу работают TypeScript, CoffeeScript и т.д.

https://6to5.org/repl.html - тут можно поиграться, например,

function foo() {
  var a = 1;
  
  if (a) {
    let a = 2;
    let b = () => this;
  }
}


Превратится в

function foo() {
  var _this = this;
  var a = 1;

  if (a) {
    var _a = 2;
    var b = function () {
      return _this;
    };
  }
}
__________________
kobezzza
code monkey
Ответить с цитированием
  #646 (permalink)  
Старый 06.01.2015, 11:02
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Ruslan_xDD
kobezzza, это всё очень интересно, заюзаю как-нибудь, когда время придёт.
новая жизнь с понедельника)


... я уже перестал с нового года кофе пить так же... *глоток кофе*
Ответить с цитированием
  #647 (permalink)  
Старый 06.01.2015, 11:10
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

kobezzza, очень хочу поизучать CoffeeScript, но пока не очень понимаю, он только в Node.js? На клиенте можно? Если да, то как его подключать? А то гугл не даёт точных ответов, поэтому не могу вникнуть.
Ответить с цитированием
  #648 (permalink)  
Старый 06.01.2015, 11:14
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
kobezzza, очень хочу поизучать CoffeeScript, но пока не очень понимаю, он только в Node.js? На клиенте можно? Если да, то как его подключать? А то гугл не даёт точных ответов, поэтому не могу вникнуть.
Можно, трансляторы подключатся по принципу:

1) Ты пишешь код на языке А;
2) Затем вызываешь транслятор и сохраняешь результат, который уже и используешь.

Для автоматизациии процесса трансляции можно использовать FileWatcher-ы в IDE или системы сборки, например, Gulp или Grunt.

http://www.youtube.com/watch?v=TspTo...ature=youtu.be - это видео я сделал для своего языка Snakeskin, но принцип одинаков для всех транслируемых языков.
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 06.01.2015 в 11:24.
Ответить с цитированием
  #649 (permalink)  
Старый 06.01.2015, 11:18
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

kobezzza, всё-таки значит я не так понимал, спасибо.

Я думал, что работает по такому принципу:

В хейдере подключаем, допустим, coffee:

<script src="CoffeeScript.js></script>


Потом на странице где нибудь пишем скрипт:

<script type="text/coffeescript">
   код
</script>


И он на ходу парсится и эвалится в JS.

Спасибо за разъяснения, теперь более-менее понятно, что такое трансляторы.
Ответить с цитированием
  #650 (permalink)  
Старый 06.01.2015, 11:23
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Так как ты предлагаешь тоже можно, но сам понимаешь, что такой подход уж слишком избыточен и затратен, по этому этап трансляции обычно делают предварительно.
__________________
kobezzza
code monkey
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смишных картинок тред megaupload Оффтопик 3448 03.07.2023 09:47
React'а тред melky Оффтопик 246 13.11.2016 08:07
Webpack'а тред nerv_ Сборка проекта, утилиты 58 07.05.2016 13:46
Смешных историй тред monolithed Оффтопик 11 04.03.2015 04:20
Смишных видео с намеком тред godofjavascript Оффтопик 4 30.12.2012 23:50