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

    И чё? Прикинь - те скрипты, что получают - это тоже клиент, вот неожиданность, правда? Или ты хочешь сказать что один и тот же клиент пишут 100500 разных программистов?
      Цитата D_KEY @
      Клиент может не передать тебе нужные аргументы, или передать лишние, в надежде на то, что ты их как-то обработаешь. Или тупо опечататься и вместо . поставить , в числе с плавающей точкой :)

      И что? :blink: Как это соотносится с тем, что функция может принимать произвольное количество параметров? :wall: Тебе что, кто-то мешает при желании обработать неправильное поведение клиента? Или твоя реализация как-то от него защищает?
        Цитата Serafim @
        Ecmascript (это старая версия JS)

        :facepalm:
        Цитата Астарот @
        и вот Серафим даже со мной согласен

        А, ну, да, это всё объясняет.

        Добавлено
        Мы тут что, количеством плюсадын меряемся? Так, фигли, D_KEY +100500 - и всё, теперь уже скриптовикам надо доказывать, что они не верблюды?
        Сообщение отредактировано: MyNameIsIgor -
          Цитата MyNameIsIgor @
          Мы тут что

          Мы? Ты себя посчитал что ли? Зря, тебе диагноз уже поставлен :D
            Цитата Serafim @
            Прикинь - те скрипты, что получают - это тоже клиент, вот неожиданность, правда?

            Поясни свою фразу. Какие те скрипты и что они получают?
              Цитата Астарот @
              Зря, тебе диагноз уже поставлен

              Впервые вижу медсестру, смеющую что-то там лепетать про диагноз...
                Цитата Астарот @
                Или твоя реализация как-то от него защищает?

                Да, защищает. А если мне нужна функция с переменным числом аргументов, то об этом будет явно сказано и об этом узнает клиент, а код будет самодокументирован.
                Если же переменное число аргументов мне не нужно, то я получу гарантированные аргументы, а интерпретатор сможет указать клиенту на ошибку.
                  Цитата D_KEY @
                  Да, защищает

                  Каким образом?

                  Цитата D_KEY @
                  А если мне нужна функция с переменным числом аргументов, то об этом будет явно сказано и об этом узнает клиент, а код будет самодокументирован.

                  Каким образом он об этом узнает-то? :facepalm: Демонстрируй уже свои слова в псевдокоде-то! Что-то сдается мне разница будет минимальной, если она вообще будет, а уж про удобство я не говорю.

                  Цитата D_KEY @
                  Если же переменное число аргументов мне не нужно, то я получу гарантированные аргументы, а интерпретатор сможет указать клиенту на ошибку.

                  Датычо! Хочешь сказать, что если объявил
                  function f(a, b)
                  то это как-то гарантирует тебе вызов f как f(1,2), а не f(1,2,3) или f(1) или вообще f()? :)
                    Цитата Астарот @
                    Датычо! Хочешь сказать, что если объявил
                    function f(a, b)
                    то это как-то гарантирует тебе вызов f как f(1,2), а не f(1,2,3) или f(1) или вообще f()?

                    ВНЕЗАПНО! В нормальных языках - да
                    ExpandedWrap disabled
                      def foo(a, b):
                        print(a)
                        print(b)
                       
                      foo("s")

                    ExpandedWrap disabled
                      Traceback (most recent call last):
                        File "prog.py", line 5, in <module>
                          foo("s")
                      TypeError: foo() takes exactly 2 arguments (1 given)

                    А в мире грибников свои фирменные костыли - это да, пичалька...
                      Цитата Астарот @
                      Я наоборот нахожу это зверски удобным - если это интерфейсная функция, то мне не нужно заботится о том, что какой-то вандал впихнет в нее лишний параметр, я об этом даже не узнаю, мне не придется заморачиваться вопросами того, через какую жопу может быть вызван мой метод.

                      Вообще-то язык программирования должен бороться с вандалами а не предоставлять костыли, чтобы с ними сожительствовать.

                      Когда я вижу функции f() (функция с 0 параметров) и g(*args) (функция с любым числом параметров) я четко понимаю, какое количество параметров может передаваться в них. Когда я вижу f() и g() в JS - я ничего не понимаю, ведь валидны и такое: g() и даже вот такое: f(1, 2, 3). Хотя семантически такие вызовы - бессмысленны.
                      Сообщение отредактировано: Мяут-Настоящий -
                        Цитата MyNameIsIgor @
                        ВНЕЗАПНО! В нормальных языках - да

                        ВНЕЗАПНО ты опять не осилил возможность сделать в js так же без всяких проблем и в том виде в котором тебе удобно. Прекращай увлекаться грибами, почитай лучше букварь что ли.
                          Цитата Астарот @
                          ты опять не осилил возможность сделать в js так же без всяких проблем

                          Ну, да, ведь типизация создана для того, что аргументы ручками проверять, ага :lool:
                            Цитата Мяут-Настоящий @
                            Вообще-то язык программирования должен бороться с вандалами а не предоставлять костыли, чтобы с ними сожительствовать.

                            Кому должен-то? Тебе? А на основании чего, позволь спросить? :) Потому что тебе так захотелось?

                            Цитата Мяут-Настоящий @
                            Когда я вижу функции f() (функция с 0 параметров) и g(*args) (функция с любым числом параметров) я четко понимаю, какое количество параметров может передаваться в них. Когда я вижу f() и g() в JS - я ничего не понимаю, ведь валидны и такое: g() и даже вот такое: f(1, 2, 3). Хотя семантически такие вызовы - бессмысленны.

                            То есть я тебе пример из jquery приводил так, что б ты его пропустил? Или как?

                            Ну, ок, давай посмотрим на твои "доводы"...

                            Цитата Мяут-Настоящий @
                            Когда я вижу функции f() (функция с 0 параметров) и g(*args) (функция с любым числом параметров) я четко понимаю, какое количество параметров может передаваться в них.

                            Где ты видишь четко, а? :) Все, что ты видишь - это есть параметры или нет. Если есть - ты даже не знаешь сколько их. Любое число :D Полезное знание, даааа... Настолько полезное, что нужно придумывать костыли дробящие одно и то же на два отдельных синтаксиса. При этом ты лишаешься возможности, как я понял, сделать функцию, которая работает и с параметрами и без :-? Афигенское удобство, доложу я тебе! :D

                            Цитата Мяут-Настоящий @
                            Хотя семантически такие вызовы - бессмысленны.

                            Повторить про функции которые с одним параметром возвращают значение, а с двумя - устанавливают? Или нафантазировать такую, которая с одним параметром возвращает значение, с двумя - устанавливает, а без параметров вообще возвращает текст со справкой по использованию себя? :)

                            Добавлено
                            Цитата MyNameIsIgor @
                            Цитата Астарот @
                            ты опять не осилил возможность сделать в js так же без всяких проблем

                            Ну, да, ведь типизация создана для того, что аргументы ручками проверять, ага :lool:

                            Забористая у тебя трава - опять свою типизацию вспомнил :D Иди уже что ли в раздел с уютненьким, не позорься тут, а то ей богу неловко - взрослый парень, а такую херь несешь, что просто караул.
                              В продолжение предыдущего поста:

                              Вот есть две такие функции, одна читает какое-то свойство из dom и возвращает его:
                              ExpandedWrap disabled
                                function getSomeThings() {
                                   return someObject.someProperty;
                                }


                              Вторая считает сумму всех переданных в нее аргументов:
                              ExpandedWrap disabled
                                function sumArguments() {
                                   s = 0;
                                 
                                   for(var x in arguments)
                                      s += x;
                                 
                                   return s;
                                }


                              Какой смысл имеют вызовы getSomeThings(1, 2), sumArguments() и sumArguments(1, "x", 0.5, true)? :)

                              P.S. Это феерично (из книги по JS)
                              ExpandedWrap disabled
                                function check(args) {
                                  var actual = args.length;
                                  var expected = args.callee.length;
                                 
                                  if(actual != expected)
                                     throw new Error("Wrong call: given " + actual +
                                                        " args, expected" + expected);
                                }
                                 
                                function f(x, y, z) {
                                  check(arguments);
                                 
                                  return x+y+z;
                                }

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

                                Цитата Мяут-Настоящий @
                                Ну дак неопределенности порождают неоднозначности :)
                                Ты что-то конкретное сказать хотел или так, на перекур зашел? Я слушаю...
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (66) « Первая ... 23 24 [25] 26 27 ...  65 66


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.1135 ]   [ 15 queries used ]   [ Generated: 25.08.26, 12:46 GMT ]