На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (66) « Первая ... 45 46 [47] 48 49 ...  65 66  ( Перейти к последнему сообщению )  
> JS и его "недостатки"
    Цитата Uncle_Bob @
    И есть именно по вышеозвученной причине - невозможности расширить список аргументов в будущем при необходимости.
    А оно точно именно поэтому? А не может быть наоборот - сначала был параметр, а потом оказался ненужен, и чтобы не переписывать вызывающий код просто сделали параметры "зарезервированными"?
      korvin, ok. Будет что ответить - отвечу :)
      А в каком языке это есть?
      Но ты, по сути, показал то, что в С++ принято называть "списками типов"...

      Добавлено
      Цитата Uncle_Bob @
      Но они есть...

      Ну такой вот кривой дизайн у winAPI.

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

      Функцию с ... ты можешь вызывать с числом аргументов, отличным от прототипа.

      Цитата
      Цитата D_KEY @
      Да, он, естественно, проектировался с учетом особенностей С

      Цитата D_KEY @
      Ну и winAPI не имеет никакого отношения к С

      Нет ли здесь противоречий? :rolleyes:

      В контексте обсуждения - нет, ибо они не могли рассчитывать на особенности Си, которые трудно реализовать из других "нативных" языков.
        Цитата D_KEY @
        А в каком языке это есть?

        Сложно сказать, возможно в некоторых языках с зависимыми типами можно такое провернуть.

        Цитата D_KEY @
        Но ты, по сути, показал то, что в С++ принято называть "списками типов"...

        Ну я не сомневался, что в C++ это назовут "фичей" и дадут какое-нибудь специальное название =) Хотя по версии TAPL это что-то вроде "гибкого кортежа"
        А как будет выглядеть объявление подобного типа List и значения list из моего примера?
        Сообщение отредактировано: korvin -
          Цитата D_KEY @
          Функцию с ... ты можешь вызывать с числом аргументов, отличным от прототипа.

          То есть в прототипе должно стоять ... То есть явно указано, что функция с переменным числом аргументов. И строго говоря, функция с переменным числом аргументов подразумевает вызов с "лишними" аргументами, которые между прочим именно соответствуют прототипу, а не отличаются от него. Если че - в js не надо ничего указывать дополнительно.

          Цитата trainer @
          А не может быть наоборот

          Где-то наоборот, где-то (последним параметром) именно поэтому.
            D_KEY, кстати, а так тебя сильно возмутит:
            Цитата
            function f( prm )
            {
            ...
            }

            Цитата
            f( {
            a: 'param_1'
            ,b: {
            z = 100500
            ,x = 'string'
            }
            ,c: 99999
            })

            ? :D
              Цитата korvin @
              Ну я не сомневался, что в C++ это назовут "фичей" и дадут какое-нибудь специальное название =)

              Нет, это не фича, это просто прием.

              Цитата
              А как будет выглядеть объявление подобного типа List и значения list из моего примера?

              Что-нибудь в духе:
              ExpandedWrap disabled
                template<typename A, typename B>
                struct List
                {
                    List(A x, B y)
                        : head(x),
                          tail(y)
                    {
                    }
                 
                    A head;
                    B tail;
                };
                 
                struct {} nil;
                 
                template<typename A, typename B>
                List<A, B> cons(A a, B b)
                {
                    return List<A, B>(a, b);
                }


              ExpandedWrap disabled
                cons(1, cons("two", cons(false, nil)));


              Причем это в старом стандарте. Но подход Args... проще в использовании.

              Добавлено
              Цитата Uncle_Bob @
              Если че - в js не надо ничего указывать дополнительно.

              Ага. И именно в этом и заключается недостаток(но для браузеров - нормально, об этом уже договорились).

              Добавлено
              Цитата Астарот @
              D_KEY, кстати, а так тебя сильно возмутит

              Нет, все хорошо :)
                Цитата D_KEY @
                Нет, все хорошо :)
                А так:
                ExpandedWrap disabled
                  var f = new Function('a', 'b', 'alert(a + b);');
                  Цитата D_KEY @
                  Нет, все хорошо :)

                  То есть в одном случае тебе не нравится что могут попадать лишние параметры, а тут в обертке из {} сколько угодно - и все хорошо? :D
                    Цитата fatalist @
                    Цитата D_KEY @
                    Нет, все хорошо :)
                    А так:
                    ExpandedWrap disabled
                      var f = new Function('a', 'b', 'alert(a + b);');

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

                    Добавлено
                    Цитата Астарот @
                    Цитата D_KEY @
                    Нет, все хорошо :)

                    То есть в одном случае тебе не нравится что могут попадать лишние параметры, а тут в обертке из {} сколько угодно - и все хорошо? :D

                    Ты передаешь указанным 1 параметром объект. Да, все хорошо.
                      Цитата fatalist @
                      А так:

                      Ну, это уже конструктор :) немного не то.

                      Добавлено
                      Цитата D_KEY @
                      Ты передаешь указанным 1 параметром объект. Да, все хорошо.

                      Ну, я и говорю - один объект - хорошо, и пофиг что он сложен внутри, а тот же объект с ободранной оберткой, но несущий такие же данные - плохо :D
                        Цитата D_KEY @
                        Да тоже нормально, если эти строки получены из вне(иначе лучше лямбды).
                        Ну это сродни eval, поэтому применяется как правило с большой осторожностью...

                        Добавлено
                        Цитата Астарот @
                        Ну, это уже конструктор :) немного не то.
                        Да я так привел для разнообразия :)

                        Добавлено
                        Цитата D_KEY @
                        Ты передаешь указанным 1 параметром объект. Да, все хорошо.
                        И тебя уже в данном случае не волнует, что в явном виде нету нигде указания на то, что этот объект должен содержать и каких типов, так?
                        Сообщение отредактировано: fatalist -
                          Цитата Астарот @
                          а тот же объект с ободранной оберткой, но несущий такие же данные - плохо :D

                          Это не "ободранный объект", а аргументы функции :)

                          Добавлено
                          Цитата fatalist @
                          И тебе уже в данном случае не волнует, что в явном виде нету нигде указания на то, что этот объект должен содержать и каких типов, так?

                          Когда речь идет о языке с динамической типизацией - не волнует.
                            Цитата D_KEY @
                            Когда речь идет о языке с динамической типизацией - не волнует.
                            А почему тогда волнует, если эти все парметры будут разложены в аргументах?
                              Цитата D_KEY @
                              Это не "ободранный объект", а аргументы функции :)

                              Нет, это - формализм и игра словами. У тебя и с объектом нигде не написано что и каких типов нужно подавать, и никто не мешает подать тучу всего не нужного - но ВНЕЗАПНО это уже нормально, и только лишь потому что "договорились об объекте - подали объект" :D То, что никакой проблемы по сути этим не решили, а только выполнили формальности - не в счет, главное формально все пучком :D Ой, не могу :lool:
                                Цитата fatalist @
                                Цитата D_KEY @
                                Когда речь идет о языке с динамической типизацией - не волнует.
                                А почему тогда волнует, если эти все парметры будут разложены в аргументах?

                                Это не параметры - это один параметр.
                                Функция возведения в квадрат может иметь смысл для какого-то сложного объекта(например, у нас есть объект-пара, рассматриваемые как числитель и знаменатель рационального числа), но она не имеет смысла для, например, трех аргументов - аргумент у функции один.

                                Добавлено
                                Цитата Астарот @
                                Цитата D_KEY @
                                Это не "ободранный объект", а аргументы функции :)

                                Нет, это - формализм и игра словами. У тебя и с объектом нигде не написано что и каких типов нужно подавать, и никто не мешает подать тучу всего не нужного - но ВНЕЗАПНО это уже нормально, и только лишь потому что "договорились об объекте - подали объект" :D То, что никакой проблемы по сути этим не решили, а только выполнили формальности - не в счет, главное формально все пучком :D Ой, не могу :lool:

                                Мне тяжело объяснить тебе смысл типизации, я пока не нащупал на что можно опереться при объяснении в нашем случае...
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (66) « Первая ... 45 46 [47] 48 49 ...  65 66


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.1532 ]   [ 14 queries used ]   [ Generated: 25.08.26, 10:40 GMT ]