Re[25]: JS - очень простой язык
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 24.03.17 17:28
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, Serginio1, Вы писали:


S>> Ну к этому времени и JS будет совсем другим. Добавили модульность, async await. Linq прикручивают http://www.javascriptlinq.com/

S>> Правда типизация пока только в TS.

_>Очаровательный сайтик — даже навигация (меню и ссылки) работает только в 1/3 случаев. Даже боюсь представить что они там предлагают в своих библиотеках.

Ну это первая попавшаяся ссылка есть и другие реализации https://github.com/kutyel/linq.ts
https://github.com/kutyel/linq.ts/blob/master/test/list.ts
и солнце б утром не вставало, когда бы не было меня
Re[6]: JS - очень простой язык
От: Ops Россия  
Дата: 25.03.17 02:36
Оценка: +1
Здравствуйте, Somescout, Вы писали:

S>Как бы сказать: без документации понять почему так происходит не просто. То есть когда о такое уже спотыкался, всё понятно, но в первый раз(ы) — WTF?


Вот еще:
> const arr = new Array(4);
[undefined, undefined, undefined, undefined]

Вроде нормально? А если так?
> arr.map((elem, index) => index);
[undefined, undefined, undefined, undefined]
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[7]: JS - очень простой язык
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 25.03.17 06:25
Оценка:
Здравствуйте, Ops, Вы писали:


>> arr.map((elem, index) => index);

Ops>[undefined, undefined, undefined, undefined]
Ops>[/code]

Не знаю насчет мап, но for дает индекс.

 <tr *ngFor="let rows of RowsRange; let row = index">

                            <td *ngFor="let col of ColsRange; let i = index">

                                <input type="text" (keypress)="KeyPress($event,Puzzle[row*9+i].value)" (click)="Click(Puzzle[row*9+i])" [class.IsFocused]="Puzzle[row*9+i].IsFocused"

                                       [(ngModel)]="Puzzle[row*9+i].value" [disabled]="Puzzle[row*9+i].disabled" size="3" maxlength="1">

                            </td>

                        </tr>




export class SudokuComponent {

    RowsRange = new Array(9);

    ColsRange = this.RowsRange;
и солнце б утром не вставало, когда бы не было меня
Re[8]: JS - очень простой язык
От: Ops Россия  
Дата: 25.03.17 07:03
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Не знаю насчет мап, но for дает индекс.


Ну вот еще и неконсистентность...
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[8]: JS - очень простой язык
От: StandAlone  
Дата: 25.03.17 09:45
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>
S> <tr *ngFor="let rows of RowsRange; let row = index">

S>                            <td *ngFor="let col of ColsRange; let i = index">

S>                                <input type="text" (keypress)="KeyPress($event,Puzzle[row*9+i].value)" (click)="Click(Puzzle[row*9+i])" [class.IsFocused]="Puzzle[row*9+i].IsFocused"

S>                                       [(ngModel)]="Puzzle[row*9+i].value" [disabled]="Puzzle[row*9+i].disabled" size="3" maxlength="1">

S>                            </td>

S>                        </tr>
S>


Это уже другое убожество. Индус-трия запуталась в собственных соплях и через 15 лет вернулась к ASP с первыми php4-шаблонизаторами. Синдром NotInventedHere в исполнении гугла.
Ожидаем в ближайшие пару лет изобретения WebForms и WebComponents. Собственно компоненты они уже пытаются изобретать во втором Ангуляре(или уже 5м?6м?слегка отстал от новостей(
Re[9]: JS - очень простой язык
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 25.03.17 10:04
Оценка:
Здравствуйте, StandAlone, Вы писали:

SA>Здравствуйте, Serginio1, Вы писали:


S>>
S>> <tr *ngFor="let rows of RowsRange; let row = index">

S>>                            <td *ngFor="let col of ColsRange; let i = index">

S>>                                <input type="text" (keypress)="KeyPress($event,Puzzle[row*9+i].value)" (click)="Click(Puzzle[row*9+i])" [class.IsFocused]="Puzzle[row*9+i].IsFocused"

S>>                                       [(ngModel)]="Puzzle[row*9+i].value" [disabled]="Puzzle[row*9+i].disabled" size="3" maxlength="1">

S>>                            </td>

S>>                        </tr>
S>>


SA>Это уже другое убожество. Индус-трия запуталась в собственных соплях и через 15 лет вернулась к ASP с первыми php4-шаблонизаторами. Синдром NotInventedHere в исполнении гугла.

SA>Ожидаем в ближайшие пару лет изобретения WebForms и WebComponents. Собственно компоненты они уже пытаются изобретать во втором Ангуляре(или уже 5м?6м?слегка отстал от новостей(

Так это и есть Angular 2. Только это ближе к Razor, но на клиенте.
Сейчас сервер только выдает получает данные в виде JSON. DOM строится на клиенте.
[(ngModel)]="Puzzle[row*9+i].value"

это двухсторонняя привязка. То есть изменения Puzzle[row*9+i].value вне input отразятся в input, а при изменении в input изменится и value объекта.

Что касается
[class.IsFocused]="Puzzle[row*9+i].IsFocused"


то изменяется класс IsFocused при изменении свойства IsFocused объекта.
и солнце б утром не вставало, когда бы не было меня
Отредактировано 25.03.2017 11:55 Serginio1 . Предыдущая версия . Еще …
Отредактировано 25.03.2017 11:54 Serginio1 . Предыдущая версия .
Отредактировано 25.03.2017 10:35 Serginio1 . Предыдущая версия .
Re[7]: JS - очень простой язык
От: anonymous Россия http://denis.ibaev.name/
Дата: 25.03.17 11:51
Оценка:
Здравствуйте, Ops, Вы писали:

Ops>Вот еще:

Ops>
>> const arr = new Array(4);
Ops>[undefined, undefined, undefined, undefined]
Ops>


Вероятно это зависит от реализации, но по стандарту:
[<4 empty slots>]

что не то же самое.

Ops>Вроде нормально? А если так?

Ops>
>> arr.map((elem, index) => index);
Ops>[undefined, undefined, undefined, undefined]
Ops>


Аналогично.
[<4 empty slots>]


> var a = [];
> a[2] = 1;
> a;
[<2 empty slots>, 1];
> a.map((e, i) => i);
[<2 empty slots>, 2];
Re[8]: JS - очень простой язык
От: Ops Россия  
Дата: 25.03.17 17:59
Оценка:
Здравствуйте, anonymous, Вы писали:

A>Вероятно это зависит от реализации, но по стандарту:

A>что не то же самое.
А в чем принципиальная разница? И почему, как здесь рядом подсказали, в цикле индексы есть? Я правильно понимаю, что понять этого нельзя, нужно тупо запомнить?
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[9]: JS - очень простой язык
От: anonymous Россия http://denis.ibaev.name/
Дата: 25.03.17 20:05
Оценка:
Здравствуйте, Ops, Вы писали:

A>>Вероятно это зависит от реализации, но по стандарту:

A>>что не то же самое.
Ops>А в чем принципиальная разница? И почему, как здесь рядом подсказали, в цикле индексы есть? Я правильно понимаю, что понять этого нельзя, нужно тупо запомнить?

Тут дело в том, как устроен массив в JS: это объект с полем length и полями с именами 0, 1, 2 и так далее, то есть индексы это не смещения, а названия полей. Когда создаётся массив длиной, например, 4, в поле length записывается значение 4, а поля 0, 1, 2 и 3 не создаются вообще, а не только не инициализируются. Я не знаю, как работает map, но могу предположить, что он бежит от 0 до length не включительно, и если поля с соответствующим названием-индексом нет, то переходит к следующей итерации, не вызывая колбек. В результате получается массив той же длины и снова без полей-индексов.

И в цикле индексов нет тоже:
for (var i in new Array(4)) { console.log(i) }

ничего не выведет.

Разве что так:
var a = new Array(4);
for (var i = 0; i < a.length; i++) { console.log(i) }

Но тут индекс берётся из внешнего по отношению к массиву источника.
Re[9]: JS - очень простой язык
От: StandAlone  
Дата: 25.03.17 20:38
Оценка:
Здравствуйте, Ops, Вы писали:

Ops>А в чем принципиальная разница? И почему, как здесь рядом подсказали, в цикле индексы есть? Я правильно понимаю, что понять этого нельзя, нужно тупо запомнить?


Я в ужасе покрываюсь липким потом. Схожу с ума, или вы прикидываетесь?
Вы вообще о чем, какие циклы?
В каком цикле? В том, что Serginio1 притащил? Там нет никаких циклов! Это директива сраного Ангуляра.
Зачем он постоянно тащит сюда, в обсуждение JS, всякие какашки, типа ангуляра или майкрософтовской правотипной отрыжки решительно непонятно.
А директива, джентльмены, это совсем не языковая фича. Это что-то вроде вот такого.
var ngIfDirective = ['$animate', '$compile', function($animate, $compile) {
  return {
    multiElement: true,
    transclude: 'element',
    priority: 600,
    terminal: true,
    restrict: 'A',
    $$tlb: true,
    link: function($scope, $element, $attr, ctrl, $transclude) {
        var block, childScope, previousElements;
        $scope.$watch($attr.ngIf, function ngIfWatchAction(value) {

          if (value) {
            if (!childScope) {
              $transclude(function(clone, newScope) {
                childScope = newScope;
                clone[clone.length++] = $compile.$$createComment('end ngIf', $attr.ngIf);
                // Note: We only need the first/last node of the cloned nodes.
                // However, we need to keep the reference to the jqlite wrapper as it might be changed later
                // by a directive with templateUrl when its template arrives.
                block = {
                  clone: clone
                };
                $animate.enter(clone, $element.parent(), $element);
              });
            }
          } else {
            if (previousElements) {
              previousElements.remove();
              previousElements = null;
            }
            if (childScope) {
              childScope.$destroy();
              childScope = null;
            }
            if (block) {
              previousElements = getBlockNodes(block.clone);
              $animate.leave(previousElements).done(function(response) {
                if (response !== false) previousElements = null;
              });
              block = null;
            }
          }
        });
    }
  };
}];

Шик, блеск, красота, не правда ли?! Я ж говорил, что JS хороший язык, он позволяет отложить много отличного компактного кода, совсем как старый добрый С!
Re[10]: JS - очень простой язык
От: StandAlone  
Дата: 25.03.17 20:43
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Так это и есть Angular 2.


Да неужели. Кто бы мог подумать!

S>Только это ближе к Razor, но на клиенте.


Отличная шутка, Евгений Ваганович! Razor, ну конечно же, как же, не иначе. А фанерный кукурузник это что-то ближе к Space Shuttle, но на совхозном поле.

S> то изменяется класс IsFocused при изменении свойства IsFocused объекта.


Все это прекрасно! Давайте немного почитаем отзывы пользователей Ангуляр2. Оффтопить так оффтопить!
https://meebleforp.com/blog/36/angular-2-is-terrible

<ul class="session-container-list">
  <li class="session-container"
    *ngFor="let container of containers"
    [class.empty-container]="container.sessions.length === 0" (click)="container.sessions.length === 0&&!isPublic&&!isAnalytics&&addNewSession(container)" [style.cursor]="(!isPublic&&!isAnalytics)?'pointer':'auto'">
    <ul *ngIf="!isPublic" class="session-list"
        [dragula]='"column"' [dragulaModel]='container.sessions'
        data-column-type="absolute"
        [attr.data-container]="getContainerData(container) | json">
      <li class="session-wrapper"
        *ngFor="let session of container.sessions"
        [attr.data-session-id]="session.id"
        [attr.data-session-placeholder]="session.placeholder"
        [attr.data-session-start]="session.start?session.start.toISOString():''"
        [attr.data-session-duration]="session.duration"
        [class.placeholder]="session.placeholder">
        <my-session [session]="session" [offsetDate]="offsetDate" [agenda]="agenda" [isPublic]="isPublic" [isAnalytics]="isAnalytics"
          (onSessionEdited)="onSessionEdited($event)"
          (onSpeakerEdited)="onSpeakerEdited($event)"
          (onSpeakerAdded2)="onSpeakerAdded($event)"
          (onVenueEdited)="onVenueEdited($event)"
          (onVenueAdded2)="onVenueAdded($event)"
          (onSessionDeleted)="onSessionDeleted($event)"
          ></my-session>
      </li>
    </ul>
    <ul *ngIf="isPublic && container.sessions" class="session-list">
      <li class="session-wrapper"
        *ngFor="let session of container.sessions"
        [class.placeholder]="session.placeholder">
        <my-session [session]="session" 
                    [offsetDate]="offsetDate" 
                    [agenda]="agenda" 
                    [isPublic]="isPublic" 
                    [isAnalytics]="isAnalytics" 
                    *ngIf="session.toggle"
                    [token]="token"
                    [interested]="isInterestedInSession(session)"
                    (onSessionInterestEdited)="onSessionInterestEdited($event)"
                    [analyticsData]="getAnalyticsDataForSession(session)">
        </my-session>
      </li>
    </ul>
  </li>
</ul>


Звездические ноги!!!! Я вою, вою от восторга!
Отредактировано 25.03.2017 20:46 StandAlone . Предыдущая версия .
Re[10]: JS - очень простой язык
От: Ops Россия  
Дата: 25.03.17 21:12
Оценка:
Здравствуйте, StandAlone, Вы писали:

SA>Вы вообще о чем, какие циклы?

SA>В каком цикле? В том, что Serginio1 притащил? Там нет никаких циклов! Это директива сраного Ангуляра.

Ну я не сильный JS-писатель, не знаю нюансов, думал, что так теперь принято на нем писать, а прочитать и разобраться в том ужасе, каюсь, не осилил, поверил на слово
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[10]: JS - очень простой язык
От: Ops Россия  
Дата: 25.03.17 21:26
Оценка:
Здравствуйте, anonymous, Вы писали:

A>Тут дело в том, как устроен массив в JS: это объект с полем length и полями с именами 0, 1, 2 и так далее, то есть индексы это не смещения, а названия полей. Когда создаётся массив длиной, например, 4, в поле length записывается значение 4, а поля 0, 1, 2 и 3 не создаются вообще, а не только не инициализируются. Я не знаю, как работает map, но могу предположить, что он бежит от 0 до length не включительно, и если поля с соответствующим названием-индексом нет, то переходит к следующей итерации, не вызывая колбек. В результате получается массив той же длины и снова без полей-индексов.


Понятно. Массив есть, ненулевой длины, элементов нет, и индексов нет, но длина есть. Все ясно, просто и логично.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[11]: JS - очень простой язык
От: Mystic Artifact  
Дата: 25.03.17 21:31
Оценка:
Здравствуйте, Ops, Вы писали:

Ops>Понятно. Массив есть, ненулевой длины, элементов нет, и индексов нет, но длина есть. Все ясно, просто и логично.

Более того — движки выделяют память реальную и кусками, а JS-блудники ещё и хотят всяких Int32Array. Возникает резонный вопрос — что такое array, когда он разрежен, а когда нет, и зачем им вдруг нужны типы?
Отредактировано 25.03.2017 21:32 Mystic Artifact . Предыдущая версия .
Re[11]: JS - очень простой язык
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 26.03.17 05:25
Оценка:
Здравствуйте, StandAlone, Вы писали:


SA>Звездические ноги!!!! Я вою, вою от восторга!


Я рад за то, что Angular 2 привел тебя в восторг.
На самом деле это компонент с привязками с дочерними компонентами и родительским
Но это аналогично и WPF. Там иногда еще страшнее.
Обычно такой код соответствует универсальным компонентам.
Используй готовые компоненты http://www.primefaces.org/primeng/#/
Главное, что ты не работаешь с DOM напрямую. Только декларативно.


Ты кстати программировал на Angular 2?

Кстати статья написана всего после 2 х недель изучения Angular 2.
Ты один из тех, кто судит о Паваротти о том как Рабинович напел?
и солнце б утром не вставало, когда бы не было меня
Отредактировано 26.03.2017 6:19 Serginio1 . Предыдущая версия . Еще …
Отредактировано 26.03.2017 6:17 Serginio1 . Предыдущая версия .
Отредактировано 26.03.2017 6:05 Serginio1 . Предыдущая версия .
Отредактировано 26.03.2017 5:44 Serginio1 . Предыдущая версия .
Re[11]: JS - очень простой язык
От: anonymous Россия http://denis.ibaev.name/
Дата: 26.03.17 05:48
Оценка:
Здравствуйте, Ops, Вы писали:

Ops>Понятно. Массив есть, ненулевой длины, элементов нет, и индексов нет, но длина есть. Все ясно, просто и логично.


Не просто, но логика в этом определённая есть. И главное — ты вряд ли столкнёшься с этой особенностью. Пример выше искусственен, получать массив индексов с помощью map — зачем?
Re[12]: JS - очень простой язык
От: anonymous Россия http://denis.ibaev.name/
Дата: 26.03.17 09:54
Оценка:
Здравствуйте, Mystic Artifact, Вы писали:

Ops>>Понятно. Массив есть, ненулевой длины, элементов нет, и индексов нет, но длина есть. Все ясно, просто и логично.

MA> Более того — движки выделяют память реальную и кусками, а JS-блудники ещё и хотят всяких Int32Array. Возникает резонный вопрос — что такое array, когда он разрежен, а когда нет, и зачем им вдруг нужны типы?

Int32Array — это array-like объект, который не имеет отношения к Array, это буфер с иным поведением. Так же объект Arguments, который хранит аргументы функции, похож по интерфейсу на Array, но не связан с ним. Они все похожи лишь наличием поля length и полей-индексов.
Re[21]: JS - очень простой язык
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 27.03.17 09:45
Оценка:
Здравствуйте, neFormal, Вы писали:

I>>Они как раз были рабочие. Флеш до сих пор в нише. Аплеты держались до 10го года.

F>флэш не в нише интерфейсов. игрушки на нём делали, да и сейчас делают. потому что удобно графоний натягивать.

Флеш во все времена был в нише интерфейсов. Именно потому и в играх он взлетел.

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


I>>Питон работал в браузере, его не надо было встраивать.


F>а когда это было?


Гдето в районе нулевых

I>>Мы встраивали питон в своё приложение, кстати говоря, он быстро отгнил, практически мгновенно.


F>что за приложение было? какое применение питона?


Навроде САПР. Три семейства продуктов или даже четыре, я уже не помню. Полная автоматизация приложения, юзер может как в MS Office, написать всё что угодно на скрипте, вызвать любую публичную функцию приложения и тд.

F>>>в приложениях типа игр js практически не встречается.

I>>Это не так. Не в большинстве случаев, но есть. Я даже писал расширения на ём.

F>поделись историями успеха.


Тебе нужна статистика, доля рынка и тд или что ?
Re[24]: JS - очень простой язык
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 27.03.17 09:47
Оценка:
Здравствуйте, StandAlone, Вы писали:

SA>В каком — этом??? Любая машина со временем превращается в опель, любое приложение на JS, который сложнее Hello world, превращается в набор из показанных мной компактных личинок.

SA>Write-only код, написан чукчей-нечитателем, неподдерживаем в принципе.

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

SA>Именно об этой фиче нашего простого языка мы тут и разговариваем.


Это фича библиотеки, а не языка.
Re[22]: JS - очень простой язык
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 27.03.17 09:55
Оценка:
Здравствуйте, neFormal, Вы писали:

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


F>больше, чем кодирование? ты там алгоритмы кодирования на js пишешь, что у тебя текста мало?


Больше. Кодинг это просто набор текста. 1мб текста набирается за смешное количество времени. С учетом помощи IDE, копипасты так и вовсе время 0. А чем ты занят останое количество времени ?


F>>>но в данном примере особого сокращения нет. это не экономия на спичках, это бОльшая выразительность кода.

I>>Все эти неявные фокусы вылазят боком при правильном тестировании.

F>во1х, это явное указание


Врёшь. Ты не знаешь, сколько аргументов из необязательных будут использованы. Следовательно — неявное.

F>во2х, тестирование от этого не страдает. или показывай пример.


Страдает читаемость и сопровождение.

F>да хоть что. код становится проще, читабельней, хорошо поддаётся правке.


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