Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Унылого треша тред (https://javascript.ru/forum/offtopic/47728-unylogo-tresha-tred.html)

tenshi 03.02.2014 14:04

Цитата:

Сообщение от Maxmaxmaximus7 (Сообщение 295391)
а фпизду, оставлю все 3 разделителя - . :

а сам буду использовать няшное двоеточие

Двоеточие используется для xmlns. Не стоит идти поперек стандартов.

tenshi 03.02.2014 14:07

Цитата:

Сообщение от Maxmaxmaximus7 (Сообщение 295408)


кто еще не в курсе, ui приветствует распиздяйский но красивый стиль написания кода =)

1) не рекомендуется использовать точки с запятой, так как они не красивые
2) если не обьявлен var то переменная считается свойством контроллера, если обьявлен, то не считается
3) если идет приравнивание круглых скобочек, то считается что это формула, и вешается геттер, при обращении к которому значение формулы будет пересчитываться
4) сервисы доступны по умолчанию в любом месте кода контроллера, и их имена начинаются с бакса.
5) сервисы поддерживают ассинхронность, и если сервис поддерживает (а например встроенный сервис $http поддерживает) то после окончания запроса в поле в которое мы его присвоили (куда временно поместилась навидимая формула с промисом) поместится результат запроса.

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

tenshi 03.02.2014 14:10

Цитата:

Сообщение от Maxmaxmaximus7 (Сообщение 295413)
И еще ребят, вот тут уж точно с вами посоветоваться нужно, как лучше передавать параметры в директивы? Смотрите, вот в ангуляре там каждая директива принимает СТРОКУ и парсит её, выпарсивая из неё значения. она может воспринято эту строку как выражение и выполнить его через eval (так например события делают), может просто там какое-то слово подчерпнуть, число, и.т.п. НО СМОТРИТЕ, как сделать ДИНАМИЧЕСКИ ИЗМЕНЯЕМЫЕ ПАРАМЕТРЫ??


Допустим есть у нас директива fx:fire которая рисует тень из огня, и принимает она на вход 2 параметра, ширина огня и высота огня) ок.

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

Например можно сделать так fx:fire="10px 5px" по аналогии с css, но что если мы хотим динамически менять их? Тогда можно сделать так:

fx:fire="{panel.width + 10}px {panel.height + 5}px"

ок ок, но не кажется ли вам это как то тупо? вначале мы высчитываем значения выражений, подставляем их как строки в фигурыне скобки, получаем одну большую строку значения атрибута fx:fire потом передаем эту строку директиве fire и она ПАРСИТ её выдерая значения, и только потом уже применяет их. по моему как-то тупо, не проще ли сразу передать туда выражение?

типа fx:fire="panel.width + 10".

но вопрос, КУДА И КАК ПИХАТЬ ВТОРОЕ ЗНАЧЕНИЕ??? я короче придумал вот как делать, все что в значени атрибута оборачивается в квадратные скобки, получается массив =) это будет типа массив аргументов к директиве =) по аналогии с параметрами функции.

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

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

грубо говоря мой вопрос в следующем, что более читабильно это или это?

fx:fire="panel.width + 10, panel.height + 5"

fx:fire="{panel.width + 10}px {panel.height + 5}px"

Заниматься вычислениями - задача вью-модели. На нормальном языке программирования. Где есть циклы, функции, объекты, наследование и прочая фигня. Не к чему реализовывать то же самое, но в шаблоне.

Maxmaxmaximus7 03.02.2014 15:19

Цитата:

Сообщение от cyber
По сути функции контроллеры использует тольку ui, почему бы не переписывать эти функции в локальный объект, и затирать их с глобального window.

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

var app = ui.module('app');   // создаем модуль наследуем его от ui

app.controller('Main', function(){});
app.controller('Panel', function(){});

app.filter('fdf',function(){});

app.directive('fdf',function(){});
app.directive('fdf',function(){});

app.animation('fade',function(){});


ну вот в таком стиле)


Цитата:

Сообщение от cyber
О чем ты?

есть области видимости, а есть КОНТРОЛЛЕРЫ по уму контроллеры надо создавать в какую то ячейку области видимости:

типа

$scope.myPanel = new Panel();

и только через myPanel обращаться.

но ты дал мне понять что это тупо (а я и сам так считал просто с ангуляра слизал) и что можно делать контроллеры так

Panel.call($scope);

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

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

cyber 03.02.2014 15:26

Maxmaxmaximus7, хм может так
var panel = $scope.myPanel = new Panel();
myPanel.parent = panel;// пусть пользователь вручную добавляет, или ты создай parent которому при создание присваиваться this.
panel.call($scope);

Maxmaxmaximus7 03.02.2014 15:33

Цитата:

Сообщение от tenshi
Мне бы хотелось вот так:

так и есть)

Цитата:

Сообщение от tenshi
Точки крепления - да. Но не логика же вычисления условий.

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



Цитата:

Сообщение от tenshi
Тогда почему бы не использовать ангуляр?

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

Цитата:

Сообщение от tenshi
Двоеточие используется для xmlns. Не стоит идти поперек стандартов.

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

Цитата:

Сообщение от tenshi
Ну и изобретать свой язык тоже не стоит без острой необходимости, ибо дебажить

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

Цитата:

Сообщение от tenshi
Не к чему реализовывать то же самое, но в шаблоне.

плюсики минусики я показал чтобы показать что это выражение и там оно "СЧИТАЕТСЯ" не более) так то конечно не стоит.

Maxmaxmaximus7 03.02.2014 15:37

cyber короче вот такими способами можно создать контроллер


<div ui:controller="List"></div>
<div ui:controller="List()"></div>
<div ui:controller="new List"></div>
<div ui:controller="new List()"></div>
<div ui:controller="Menu = List"></div>
<div ui:controller="Menu = List()"></div>
<div ui:controller="Menu = new List()"></div>




теперь надо придумать какими способами можно обращаться к его полям. может так?
<div ui:controller="Menu = new List()">
  {name}
  {List.name}
  {Menu.name}
</div>

cyber 03.02.2014 15:43

Цитата:

Сообщение от Maxmaxmaximus7
теперь надо придумать какими способами можно обращаться к его полям. может так?

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

Maxmaxmaximus7 03.02.2014 15:44

cyber,

по поводу обращения к родительским контроллерам с такими же именами, вроде проблему решил:

<div ui:controller="MainMenu = new List()">

  <div ui:controller="SubMenu = new List()">

    {name}          // sub
    {List.name}     // sub
    {SubMenu.name}  // sub
    {MainMenu.name} // main

  </div>

</div>


норм не? то есть ЕЕЕЕСЛИ ВДРУГ такое встретится что человек сделал один одноименный контроллер в другой и внутри внутреннего хочет обратится к полям внешнего, то он сможет сделать так

<div ui:controller="MainList = List">

  <div ui:controller="List">
    
    {name}          // sub
    {MainList.name} // main

  </div>

</div>


он даст верхнему просто второе имя MainList и все) типа псевдоним

cyber 03.02.2014 15:49

Maxmaxmaximus7, угу только тебе прийдеться это все в доке описать, потратишь ты времени на доки:)

Maxmaxmaximus7 03.02.2014 15:50

Цитата:

Сообщение от tenshi
ибо дебажить потом это не ахти какое удовольствие.

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

Цитата:

Сообщение от cyber
угу только тебе прийдеться это все в доке описать, потратишь ты времени на доки

я просто ссылку на оффтопик дам) он весь усран доками всех версий :D

cyber 03.02.2014 16:18

Цитата:

Сообщение от Maxmaxmaximus7
я просто ссылку на оффтопик дам) он весь усран доками всех версий

не стал пользоваться твоим ui, если бы не было нормальной доки :)

Maxmaxmaximus7 03.02.2014 16:39

я пошутил жи) дока кстате будет написана на ui ))

cyber 03.02.2014 16:39

если какое то соглашение по размещению функции, которые вызываються из функции прототипов, щас я просто их обьявляю после обьявления методов прототипа.
И еще к примеру есть функции которые используют объект прототипа, и как лучше сделать объявить их в прототипе с _, примеру _template (что не хочеться делать) или передавать сам объект в качестве параметров (как я щас и делаю)?

cyber 03.02.2014 16:39

Цитата:

Сообщение от Maxmaxmaximus7
я пошутил жи) дока кстате будет написана на ui ))

почему я не удивлен :)

cyber 03.02.2014 16:40

Цитата:

Сообщение от Maxmaxmaximus7
я пошутил жи

зная тебя, то бы я не удивился :)

tenshi 03.02.2014 19:15

> точки крепления) логика описана в контроллерах, взаимодействие с dom описано в директивах,директивы это такие специльные атрибуты.

> fx:fire="panel.width + 10"

Это - логика

Точка крепления выглядела бы так: fx-fire="{widthOfFire}"

> она быстрее

где результаты замеров? И за счет чего ускорение?

> сахарнее

, и в ней есть куча фитч которых нет в ангуляре, таких например как FRP формулы и ассинхронные сервисы с кодом синхронных.

А тут по подробнее пожалуйста)

> не стоит не иди, ты может использовать и другие разделители) например - или точку.

Отсутствие правил - ещё хуже

tenshi 03.02.2014 19:18

Цитата:

Сообщение от Maxmaxmaximus7 (Сообщение 295581)
cyber короче вот такими способами можно создать контроллер


<div ui:controller="List"></div>
<div ui:controller="List()"></div>
<div ui:controller="new List"></div>
<div ui:controller="new List()"></div>
<div ui:controller="Menu = List"></div>
<div ui:controller="Menu = List()"></div>
<div ui:controller="Menu = new List()"></div>

[/html]

Выбери что-нибудь одно. Что-нибудь кроме имени имеет значение? Если нет, то зачем вся эта пунктуация?

Maxmaxmaximus7 03.02.2014 19:49

Цитата:

Сообщение от tenshi
Это - логика

я же сказал тебе что это просто пример и вычисления там делаются только чтобы показать что это выражение а не просто слова

Цитата:

Сообщение от tenshi
Выбери что-нибудь одно. Что-нибудь кроме имени имеет значение? Если нет, то зачем вся эта пунктуация?

а какая тут путаница? вае варианты делают разные вещи. (ну разве что кроме new который просто писать не запрещено если кому хочется)

controller="Panel" создает контроллер

controller="Panel(1, 'ololo')" создает контроллер с определенными параметрами


controller="Menu = Panel" создает контроллер и дает ему имя Menu


Цитата:

Сообщение от tenshi
где результаты замеров?

у меня на компютери были когда делал, щас удлил.

Цитата:

Сообщение от tenshi
И за счет чего ускорение?

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

Цитата:

Сообщение от tenshi
А тут по подробнее пожалуйста)

ну блин я же уже писал) целый топик есть про это)

ладно чуть позже распишу.

Цитата:

Сообщение от tenshi
Отсутствие правил - ещё хуже

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

Maxmaxmaximus7 03.02.2014 20:10

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

function Chat() {

    messages = $api.getMessages( 400 )

}


мы создали (ну где то выше в коде) сервис $api у него есть метод отправляющий запрос на сервер и возвращающий промис. мы сказали этому методу что посылать нужно запрос каждые 400 миллисекунд и подгруженные данные пихать в поле messages контроллера. ответ будет поступать в формате json и в messages будет попадать массив собщений)

это как пример. Например есть сервис $interval который возвращает фьючерс) мы можем сделать примерно то же самое и не создавая своего сервиса, оч просто, есть встроенный сервис для работы с сетью $http, он не тупой и если понимает что приходит json то сразу парсит его. ок, он возвращает промис, по которому $interval может понять что какое-то действие запланировано, и ждет его исполнения прежде чем начать отсчитывать свой следующий таймер и..... короче влом обьяснять как эта магия работает, короче можно то что мы сделали выше сделать так:



function Chat() {

    messages = $interval( function() {
      return $http( 'api.php?getMessages' )
    }, 400 )

}


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

Maxmaxmaximus7 03.02.2014 20:31

<select ui:controller="Select">

  <option ui:repeat="option in options"
          on:click="selectedIndex = $index">
    {option}
  </option>

</select>



function Select() {

    selectedIndex = 0
    options = ['Рас', 'Два', 'Три', 'Четыре', 'Пятдесятодин']
    value = ( options[selected] ) // вот тут у нас всегда будет выбранное значение

}



в поле value содержится формула (геттер, если не выебываться:p ) который вычислится при обращении к нему, абстрактно, для нас там будет лежать всегда актуальное значение, это называется FRP. больше никаких событий и калбяков.

Maxmaxmaximus7 03.02.2014 20:39

ну а то что this больше полям писать не надо (но можно) означает что мы можем не ебаца больше с
var self = this
если вы понимаете о чем я)

cyber 03.02.2014 20:47

Maxmaxmaximus7, ты так и не ответил на мой вопрос.

Maxmaxmaximus7 03.02.2014 20:50

Цитата:

Сообщение от cyber
ты так и не ответил на мой вопрос.

а да кстати, я так и не понял, ты про ангуляр спрашиваешь?

kobezzza 03.02.2014 20:51

Цитата:

Сообщение от Maxmaxmaximus7 (Сообщение 295653)
ну а то что this больше полям писать не надо (но можно) означает что мы можем не ебаца больше с
var self = this
если вы понимаете о чем я)

Открой для себя Arrow Function:)

cyber 03.02.2014 20:51

Цитата:

Сообщение от Maxmaxmaximus7
а да кстати, я так и не понял, ты про ангуляр спрашиваешь?

вообще

Maxmaxmaximus7 03.02.2014 20:57

Цитата:

Сообщение от kobezzza
Arrow Function

но они не поддерживаются) по этому я открыл для себя

function(){}.bind(this) что убого жи


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

подразумевается что все надо писать вот так:


function Cat(){

   this.say = function(){} //публичная
   this._count = function(){} //приватная

   function trim(name){} // служебная 

}



а то что в прототип методы пихать это уже ЛЮДИ придумали) это паттерн, НАТИВНО писать надо так как я выше показал) и нет, соглашения нет. на всякий напомню что если в функции this не требуется то это значит что она работает не с обьектом, следовательно в методы обьекта её пихать не надо.

kobezzza 03.02.2014 20:58

Цитата:

Сообщение от Maxmaxmaximus7 (Сообщение 295667)
но они не поддерживаются) по этому я открыл для себя

function(){}.bind(this) что убого жи

Ну во первых в ФФ уже поддерживаются с версии 22 (сейчас 26), а во вторых: https://github.com/termi/es6-transpiler

Я уже пол года пишу с транслятором и не нарадуюсь:)

Maxmaxmaximus7 03.02.2014 21:02

Цитата:

Сообщение от kobezzza
Я уже пол года пишу с транслятором и не нарадуюсь

и ты предлагаешь чтобы люди писали контроллеры ui и потом прогоняли их через транслятор)?

cyber 03.02.2014 21:04

Цитата:

Сообщение от Maxmaxmaximus7
а то что в прототип методы пихать это уже ЛЮДИ придумали) это паттерн, НАТИВНО писать надо так как я выше показал) и нет, соглашения нет. на всякий напомню что если в функции this не требуется то это значит что она работает не с обьектом, следовательно в методы обьекта её пихать не надо.

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

Maxmaxmaximus7 03.02.2014 21:05

я не знаю, такого соглашения нет, идеального варианта я так и не придумал(

по этому я делаю типа так

var Cat = (function(){

   function trim(){}

   function Cat(){}
   Cat.prototype.say = function(){}

   return Cat;

})();


все служебные функции и константы пишу вверху самом


в принципе можно ебнуть как статическое свойство и константы и вспомогалки типа Cat.trim

kobezzza 03.02.2014 21:07

Цитата:

Сообщение от Maxmaxmaximus7 (Сообщение 295674)
и ты предлагаешь чтобы люди писали контроллеры ui и потом прогоняли их через транслятор)?

У меня настроен file watcher в IDE, поэтому процесс трансляции для меня не добавляет никаких сложностей:)

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

Как по мне: код нужно писать как можно очевиднее без добавления "магии", а у тебя всё состоит из "магии" - имхо это не есть гуд. Хотя, дело твоё :)

Maxmaxmaximus7 03.02.2014 21:09

Цитата:

Сообщение от kobezzza
Прост ты придумываешь свой синтаксис, но в тоже время говоришь

у меня поддерживаются arrow функции если ты об этом

Цитата:

Сообщение от kobezzza
а у тебя всё состоит из "магии"

я не хочу походить на кофескрипт, я стою на грани же, пока со скобочками не решено еще. и во вторых , НЕ ЗАБЫВАЙ что НИ ЧТО тебе не мешает писать в обычном стиле.

kobezzza 03.02.2014 21:13

Цитата:

Сообщение от Maxmaxmaximus7 (Сообщение 295681)
НЕ ЗАБЫВАЙ что НИ ЧТО тебе не мешает писать в обычном стиле.

Мне ближе философия питона, нежели перла. Многовариантность нужно уструнять и вводить чёткие жёсткие рамки.

cyber 03.02.2014 21:26

kobezzza, слушай, есть ли смысел использовать "use strict" сжатом коде? по сути он не дает прироста производительности, а только указует на ошибки

kobezzza 03.02.2014 21:27

Цитата:

Сообщение от cyber (Сообщение 295684)
kobezzza, слушай, есть ли смысел использовать "use strict" сжатом коде? по сути он не дает прироста производительности, а только указует на ошибки

нет

Maxmaxmaximus7 03.02.2014 23:17

Цитата:

Сообщение от kobezzza
Многовариантность нужно уструнять и вводить чёткие жёсткие рамки.

тем не менее в этом случае это совсем не применимо, это разные вещи, возможность писать без this и "не давать 2 варианта написания" это разные вещи, я добавил фитчу и сохранил обратную совместимость, проблемы? если ты по каким либо причинам не хочешь исопльзовать эту фитму - не используй. =) все просто

Maxmaxmaximus7 03.02.2014 23:20

и вообще у меня ни какой неочевидной магии нет, есть FRP стиль и есть обычный стиль, все фитчи направлены на то чтобы писать в FRP стиле и все, и ассинхронка и формулы. все это FRP. контроллер должен быть написан либо в FRP стиле либо в обычном. Мешать - неэстетично и нелогично.

tenshi 04.02.2014 02:42

> я же сказал тебе что это просто пример и вычисления там делаются только чтобы показать что это выражение а не просто слова

выражение - это уже логика

Maxmaxmaximus7 04.02.2014 02:59

Цитата:

Сообщение от tenshi
выражение - это уже логика

окей, зачем ты мне говоришь что там логики не должно быть? с какой целью говоришь мне об этом? чтобы я знал что там не надо использовать логику так? я даю тебе понять что я УЖЕ ЗНАЮ это. И обьясняю почему РАЗ ЗНАЮ все ровно использовал. Вопросы?


Часовой пояс GMT +3, время: 06:46.