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

    А как в определении функции указать, какие параметры нужные, а какие - нет?
      Цитата Астарот @
      Цитата D_KEY @
      Ты только сейчас понял?

      Ага, только сейчас я понял что ты говоришь фактически "у нас есть ОГО-ГО какая удобная штука, а у вас она точно такая же, но уже плохая" :D

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

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

      Указал два аргумента - принял два.

      Как я принял два, если клиент отравил 3 или 1?

      Цитата
      А что делать если ей ПОФИГ как ее вызывают? :whistle:

      Покажи мне такую функцию.
        Цитата Мяут-Настоящий @
        А как в определении функции указать, какие параметры нужные, а какие - нет?

        Ты настолько суров, что при объявлении функции задаешь не только нужные тебе параметры, но и не нужные, которые отдельно помечаешь, как не нужные? :D

        Цитата D_KEY @
        Да не об этой штуке речь, а о том, что в обычной ситуации нужно проверять аргументы, а для "этой штуки" есть отдельный механизм.
        Либо я тебя не понимаю, либо ты меня :wall:

        Цитата D_KEY @
        Как я принял два, если клиент отравил 3 или 1?

        Да так! Ты не забыл еще о том, что в js переменный инициируются в 'undefined'? Если ты передал функции параметров меньше, чем ждет реализация, то не переданные у тебя будут не определены, ты сможешь это отловить и поступить соответственно - не только выдать ошибку, но и реализовать логику.

        Цитата D_KEY @
        Покажи мне такую функцию.

        Любой функции в js ПОФИГ с каким количеством параметров ты ее вызываешь. По факту - пофиг. Правильно ее вызвали или нет отлавливается на этапе исполнения, а не на этапе вызова, что дает большую гибкость. Почему нужно столько копий сломать что бы такую простую вещь объяснить?
          Цитата Астарот @
          Ты настолько суров, что при объявлении функции задаешь не только нужные тебе параметры, но и не нужные, которые отдельно помечаешь, как не нужные? :D

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

          И порождает кучу возможных ошибок, например вот здесь:

          Цитата Астарот @
          function(a, b)
          {
          if(!a || !b)

          получается валидный вызов function(true); :)

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

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

            Блин, да ты гений! Кто б мог подумать, что так можно.
            ExpandedWrap disabled
              function f( a, b)
              {
                  var a = a || 10
                      ,b = b || 100
                      ;
                      
                  return a+b;
              }

            ExpandedWrap disabled
              alert( f(1,1) ); // 2
              аlert( f(1) );   // 101
              alert( f() );    // 110


            Цитата Мяут-Настоящий @
            И порождает кучу возможных ошибок, например вот здесь:

            Не вижу ошибок пока. Где?
              Цитата Астарот @
              Цитата Мяут-Настоящий @
              А как в определении функции указать, какие параметры нужные, а какие - нет?

              Ты настолько суров, что при объявлении функции задаешь не только нужные тебе параметры, но и не нужные, которые отдельно помечаешь, как не нужные? :D

              А разве вы в js не этим занимаетесь? Ведь у вас можно вызвать функцию, ожидающую два аргумента, хотя с одним параметром, хоть со 100500, хоть вообще без...

              Цитата
              Да так! Ты не забыл еще о том, что в js переменный инициируются в 'undefined'? Если ты передал функции параметров меньше, чем ждет реализация, то не переданные у тебя будут не определены, ты сможешь это отловить и поступить соответственно - не только выдать ошибку, но и реализовать логику.

              Я помню. Я как раз пытаюсь подвести тебя к мысли, что в js один костыль другой подпирает :D
              Только у меня не получается :'(
              Покажи пример что ли на "реализовать логику"...


              Цитата
              на этапе исполнения, а не на этапе вызова

              Что?
                Цитата Мяут-Настоящий @
                Вопрос в том, почему нельзя переложить эти проверки на плечи разработчиков языка :)

                Какие ЭТИ проверки? Разработчики языка должны за меня решить какие проверки мне нужны? Не, я понимаю, что за вас решили, что никаких проверок вам не надо вообще, проще кинуть ошибку в случае чего, вы привыкли и довольны, но я-то почему должен? :blink: Мне, знаете ли, нравится возможность работать в одной функции с тем числом параметров с каким мне удобно, и не парить мозг тем, что кто-то может вызвать функцию не правильно - в этом случае я ему об этом сообщу не на основании жестко прибитого гвоздями правила вызова, а на основании логики исполнения моего кода, и в том виде в котором я хочу. Кто тут жаловался на "я не просил, а оно сделало"?
                  Цитата Астарот @
                  Кто б мог подумать, что так можно.

                  Ну так запись
                  ExpandedWrap disabled
                    def f(a = 10, b = 20):
                        return a + b

                  Всяко короче.

                  Цитата Астарот @

                  Мявут, а мявут, ты уже скажи чем на практике плохо отбрасывание лишних аргументов, и как боротся за обратную совместимость? :rolleyes: Только ты по делу говори, а не общими словами :D Сможешь?

                  Ну вот смотри - есть три программиста: Вася, который отвечает за низкоуровневую составляющую библиотеки графических компонентов, Петя - за высокоуровневую, и Мяут который эту самую библиотеку использует.

                  У Васи в библиотеке есть функция drawRectangle(Text, Color), и тут он решает ее переписать, разделив ее на две: drawRectangle(Color), drawText(Text). Ессно у Пети, который написал функцию createButton, использующую drawRectangle библиотека ошибок не выдаст. Как Мяуту догадаться, почему кнопки из синих в белые превратились - ошибок компиляции/выполнения-то нет. :D

                  Добавлено
                  Цитата Астарот @
                  в этом случае я ему об этом сообщу не на основании жестко прибитого гвоздями правила вызова, а на основании логики исполнения моего кода, и в том виде в котором я хочу. Кто тут жаловался на "я не просил, а оно сделало"?

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

                    Для этого нужно обосновать что инициализация в undefined есть костыль хотя бы :D

                    Цитата D_KEY @
                    Покажи пример что ли на "реализовать логику"...

                    Ну, ёк-макарёк! :D
                    function f( currentTime )
                    {
                    если currentTime задан - делаем так-то и так-то
                    если currentTime не задан, т.е. вызов был вида f(), то реализовываем логику вычисления currentTime
                    к примеру так:
                    currentTime = getSystemTime(); это уже посложнее, чем значение по умолчанию, а? ;)

                    или если currentTime не задан, то
                    вызвать x()
                    }

                    Добавлено
                    Цитата Мяут-Настоящий @
                    Ну вот смотри - есть три программиста: Вася, который отвечает за низкоуровневую составляющую библиотеки графических компонентов, Петя - за высокоуровневую, и Мяут который эту самую библиотеку использует.

                    У Васи в библиотеке есть функция drawRectangle(Text, Color), и тут он решает ее переписать, разделив ее на две: drawRectangle(Color), drawText(Text). Ессно у Пети, который написал функцию createButton, использующую drawRectangle библиотека ошибок не выдаст. Как Мяуту догадаться, почему кнопки из синих в белые превратились - ошибок компиляции/выполнения-то нет. :D

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

                      В крупных проектах так и есть. Я Illumos (форк OpenSolaris) уже неделю как собираю :D
                        Цитата Мяут-Настоящий @
                        В крупных проектах так и есть.

                        OMFG :facepalm: Надеюсь никогда не буду иметь отношения к подобным крупным проектам...

                        Добавлено
                        Цитата Мяут-Настоящий @
                        Я Illumos (форк OpenSolaris) уже неделю как собираю :D

                        Вот пока ты собираешь с грудами ошибок компиляции веб-сообщество переходит на свежие версии jQuery без задних мыслей - просто подключая динамически, например с гугла, и что-то пока я не слышал ни разу воплей "Ааааа, в новой версии все поломалось!" :-? Удивительно, да? И как это мифические проблемы о которых вы тут хором рассказывали не лезут косяками?
                          Цитата Астарот @
                          Цитата D_KEY @
                          Я помню. Я как раз пытаюсь подвести тебя к мысли, что в js один костыль другой подпирает :D

                          Для этого нужно обосновать что инициализация в undefined есть костыль хотя бы :D

                          В данном конкретном случае, интерпретатор почему-то позволяет вызывать функцию с неправильным набором аргументов, заменяя неуказанные аргументы этим самым undefined и пропуская лишние. Ты почему-то считаешь, что это нормально. Сильно подозреваю, что нужных слов для объяснения найти не смогу :( Попробуй пописать с учетом обоих подходов, может тогда поймешь сам :)
                          Кстати, если мне очень будет нужно, думаю я на питоне смогу написать декоратор, который будет вести себя так же, как и js. Т.е. можно будет написать:
                          ExpandedWrap disabled
                            @js_like
                            def f(x, y):
                                return x + y

                          Лишние аргументы будем пропускать, а неуказанные инициализировать None(аналог null).
                          И вызывать как угодно. Вот только это совершенно не нужно...
                            Цитата Астарот @
                            Вот пока ты собираешь с грудами ошибок компиляции веб-сообщество переходит на свежие версии jQuery без задних мыслей - просто подключая динамически, например с гугла, и что-то пока я не слышал ни разу воплей "Ааааа, в новой версии все поломалось!"

                            А этого бага не существует:
                            http://bugs.jquery.com/ticket/11119
                              Цитата Астарот @
                              Ну, ёк-макарёк! :D
                              function f( currentTime )
                              {
                              если currentTime задан - делаем так-то и так-то
                              если currentTime не задан, т.е. вызов был вида f(), то реализовываем логику вычисления currentTime
                              к примеру так:
                              currentTime = getSystemTime(); это уже посложнее, чем значение по умолчанию, а? ;)

                              или если currentTime не задан, то
                              вызвать x()
                              }

                              В этом случае, если значение по умолчанию в языке таких выкрутасов не позволяют, то можно задать значением по умолчанию null, а в теле функции проверить и если null, то выполнить нужные действия. Т.е. опять имеем полный аналог, только без глупостей и неочевидный "неявностей" :)
                                Ещё доставляет смех сквозь слёзы - есть литералы true, false, null, но нет undefined. Поэтому всякий может написать
                                ExpandedWrap disabled
                                  undefined = {}

                                Но ничего, подпорка
                                ExpandedWrap disabled
                                  if(typeof o == 'undefined')

                                держит :D
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (66) « Первая ... 28 29 [30] 31 32 ...  65 66


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