1. Java / Говнокод #7486

    +89

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    while (m.find()) {
        String sentence = m.group(0);
        setterMethodName = "setElement" + sentence;
        break;
    }

    Чем автора не устроил оператор if остается загадкой.

    Запостил: askell, 08 Августа 2011

    Комментарии (40) RSS

    • while (m.find()) {
          String sentence = m.group(0);
          setterMethodName = "setElement" + sentence;
          if(1) break;
      }

      Надо было так?
      Ответить
    • if - это ключевое слово, а не оператор. Оператор - это короткая запись функции, операторы как правило принимают аргумент(ы) и возвращают значение. if - это слово, которое помогает парсеру распознать языковую конструкцию определенного типа, но функцией не является.
      Ответить
      • знаете, в Руби,например, все является выражением - т.е. может возвращать результат. If тоже возвращает - подобно тернарному оператору. А любой оператор является методом класса операнда и даже может быть перегружен. А так же, метод возвращает последнее вычисленное выражение, если не встретился return явно.
        Ответить
        • Руби - это в другом разделе :) В Лиспе, например, if - это макрос, а в Java - ключевое слово. Есть принципиальная разница в рамках конкретного языка. Если бы речь была о другом языке, тогда, возможно, и возражений не было бы.
          Кроме того, выражение - это синтаксическая единица, а оператор - семантическая, их области могут совпадать, пересекатся или вообще не совпадать. Т.е. использование оператора может быть целым выражением, частью выражения, или выражение может не содержать операторов. Мне где-то недавно попадалась интересная цитата по поводу:
          foo[1]
          (aref foo 1)
          foo[1]
          foo[1]

          Какие два выражения значат одно и то же, а какие, соответственно, уникальны? Естесственно, первые два, потому что первое - Java, доступ к элементу массива, при том, что за пределы массива выйти нельзя, второй - Lisp - делает то же самое, третий - Си, тоже доступ к элементу массива, но можно случайно обратится совсем не туда, куда хотелось, последний - Haskel, и это вообще к массивам никакого отношения не имеет. Это применение списка с единицей к функции foo. К сожалению забыл, как зовут автора... Так вот, if в Руби - это совсем не то, что if в Java, хотя, выглядит похоже.
          Ответить
          • > В Лиспе, например, if - это макрос
            А в SICP его называют "особая форма", поскольку if, как и другие особые формы, вычисляет свои операнды не по обычным правилам (если условие не истинно, второй операнд не вычисляется вообще).
            Ответить
      • Спасибо за комментарий, появился повод освежить базовые знания. Однако соглашусь с ним только частично. Мой комментарий можно трактовать как намек на использование ключевого слова "if" вместо "while". Однако мне как-то привычнее оперировать полноценными блоками кода и я имел ввиду всю конструкцию "if () {}" которую частенько называют оператором (например здесь http://www.intuit.ru/department/pl/javapl/10/2.html)
        Ответить
        • statement != operator
          Ответить
        • Мы всё поняли, тут просто собираются зануды, которым хочется почесать кончики пальцев об клаву и всем показать свою крутизну :)
          Ответить
      • Русское слово «оператор» в контексте языков программирования соответствует двум разным английским словам — «statement» и «operator».
        Ответить
        • т.н. стейтмент-операторский дуализмъ
          Ответить
        • Я сначала, естественно, недоумевал. Прочитал русскую Википедию, но на этот раз, Википедия пишет ерунду, и, я не думаю, что можно всерьез относится к этой статье...
          Цитата:
          Опера́ция — конструкция в языках программирования, аналогичная по записи математическим операциям, [...]. В отличие от функций, операции часто являются базовыми элементами языка и обозначаются различными символами пунктуации, а не алфавитно-цифровыми; они имеют специальный инфиксный синтаксис и нестандартные правила передачи аргументов.

          (Это предлагается использовать взамен англ. operator).
          Какой математической операции соответствует доступ к свойству объекта? Аналогичность предполагает полное соответсвие, а не `иногда похоже'. Как это `Опера́ция [...] в отличие от функций', в то время, как она является функцией? `Специальный инфиксный синтаксис' - инфиксный, это только один из вариантов, может быть как префиксный, так и постфиксный, и составные.
          Далее по тексту автор исправился и вспомнил, что операторы бывают не только инфиксными, но решил, что называть statements операторами больше не нужно, и поэтому написал, что:
          `тернарные — три аргумента ("условие ? выражение1 : выражение2")'.
          Большая Советская Энциклопедия, Политехнический Словарь, или Математический Словарь - никто и нигде не использует `оператор' взамен `выражению'. Все эти источники говорят, что оператор - это функция представляющая ряд чисел на другой ряд чисел. И, так же, БСЭ утверждает, что `оператор' и `операция' в этом смысле эквивалентны. Я не вижу причин делать исключения для языков программирования, т.как слово широко используемое и нет никакой надобности добавлять ему новый смысл, для которого уже существует в языке более подходящее слово... Более того, в языке заимствования оно никогда не употребляется в том значении, в котором его предлагает употреблять автор.

          Похоже, что просто автору статьи в Википедии захотелось поупражнятся в лингвистике, либо у него был преподаватель с плохой дикцией / забывчивый...
          Ответить
          • > но на этот раз, Википедия пишет ерунду
            ВНЕЗАПНО!
            Ответить
            • Ошибка регистрации:
              1. Это прозвучит странно, но пользователь с таким E-mail уже существует. Укажите другой
              Ответить
            • Да, потому что обычно Википедия пишет по-делу, а в этот раз - нет.
              Мне нечем было занятся, и я решил провести сравнительный анализ. Вот, что нашел:
              http://msdn.microsoft.com/ru-ru/library/6a71f45d.aspx (if в операторах не числится, слово `оператор' строго соответствует своему английскому аналогу).
              http://help.adobe.com/ru_RU/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7fd1.html (if в операторах не числится, так же как и в MSDN).
              http://www.php.net/manual/ru/language.operators.php (if не замечен среди операторов, но попдались цитаты из книг, где if, непосредственно в контексте PHP назывался оператором).
              Мне попадались словосочетания типа `оператор условия', где имелся в виду if, или `оператор' вместо `выражение' только в контексте C++, Pascal или BASIC в оригинальной (не переводной) литературе. Я не берусь судить о качестве литературы.
              http://javascript.ru/ecma/part11 (нигде if или выражения операторами не называются).
              Я не знаю, существует ли оф. документация Sun / IBM, или кто еще разрабатывал Java, на русском языке - мне такую видеть не приходилось.
              Ответить
              • При переводе на русский Страуструпа, чтобы избежать конфликта с operator, пришлось statement перевести как «инструкция», а operator — как «оператор». Отсюда пошло и в перевод msdn, и в переводы документации по другим языкам с похожим синтаксисом.
                Ответить
            • А, вот еще обнаружилось `неожиданное' использование оператора: http://mysql.ru/docs/man/SELECT.html.
              Ответить
              • Ну а здесь использована традиционная терминология, потому, что конфликта нет и SQL не выглядит Си-подобным.
                Ответить
                • Нет-нет, `неожиданное' потому и в кавычках, что оно абсолютно ожидаемое. Выражения операторами не называют. Операторами называют функции.

                  Я, если честно, никогда не читал не переводную литературу по программированию, (и вообще, если когда-то и учился программированию, то не по-русски...). Но работал много лет в газетах, и учился в незапамятные времена на полиграфиста - что, не делает меня филологом, но, на счет внесения правок и уточнений в учебную или академическую / специализированную литературу есть определенное мнение :) Я не хочу безапеляционно утверждать, но, к примеру, справка MSDN, в моем представлении, является авторитетным источником, а перевод Страуструпа (даже если по времени он появился много раньше), если он не написан каким-нибудь доктором из НИИ, таковым не является. За всю историю существования языка была куча попыток импровизаций и внесения дополнений, некоторые - к счастью, некоторые - к сожалению... Но сам факт использования не делает слово или выражение легитимным.
                  Я даже решил спросить у корректора (все из той же газеты) по этому поводу. Она честно сказала, что не знает, но ей такое использование слова `оператор' кажется странным т.как во всех остальных контекстах / значениях этого слова и в словах образованных по сходному принципу, да и этимологически, оно должно было бы обозначать объект выполняющий действия, а не действие. Т.е. если уж сильно хотеть руссифицировать это слово, то его можно было бы перевести как `рабочий', или `исполнитель', но не `работа' или `выполнение'.
                  Ответить
                  • Не пойму с чем вы спорите. В русском языке, как и во всяком другом, есть многозначные слова.

                    ОПЕРАТОР -..1) математическое понятие, означающее соответствие между элементами двух множеств X и Y, относящее каждому элементу x из X некоторый элемент y из Y. Эквивалентный смысл имеют термины "отображение", "преобразование", "функция". Обычно термин "оператор" используется, когда X и Y - множества из функциональных пространств...2) В вычислительной технике - предписание в данном языке программирования, предназначенное для задания некоторого завершенного действия в процессе переработки информации на ЭВМ...3) В технике - специалист, управляющий с пульта работой сложного оборудования (устройства), напр. ЭВМ, радиолокационной станцией, буровой установкой...4) В кино - специалист, производящий киносъемку, точнее - кинооператор. /Большой Энциклопедический Словарь/

                    Сейчас можно назвать и другие популярные значения, например, «мобильный оператор». См. также http://slovari.yandex.ru/оператор/значение/.
                    Ответить
                    • В этом списке нет значения о котором вы говорили раньше (значений может быть сколько угодно, но от их количествa соответствие какому-то конкретному не зависит).
                      Ответить
                      • Номер 2 (не узнали?). Синонимы — команда, инструкция.

                        Оператор - в программировании - фраза алгоритмического языка, определяющая законченный этап обработки данных. В состав операторов входят ключевые слова, данные, выражения и др. Различают: - атомарные операторы…
                        Яндекс.Словари›Естественные науки, 2000
                        Ответить
                        • Номер 2 называет оператор предписанием, что никак нельзя подставить во фразу, где по контексту должно быть `выражение' (как в `прибавить два к трем' - прибавить - команда, или предписание, а вся фраза - выражение). `Команда, инструкция' - вполне могут заменить `предписание', а `выражение' - нет. Выражение может включать в себя команду, а может и нет. В некоторых случаях оно может состоять только из команды, но на этом родство заканчивается.

                          С последней цитатой вынужден согласится. Т.как однозначно в ней используется то значение о которм вы говорите. Но все равно звучит как do not want.
                          Ответить
                          • Может быть вас смутила архаичная терминология, но речь об одном и том же. Оператор, команда, инструкция, предписание, директива,..
                            Ответить
                            • Нет, это просто плохой перевод, типа как `зенит'. В оригинале слово и звучало по-другому, и писалось по-другому, да и значило что-то другое, но так получилось :)
                              Ответить
                              • а чем зенит-то не угодил?
                                Ответить
                                • Слово зенит произошло от неточного чтения средневековыми книжниками арабского выражения سمت الرأس (самт ар-райс), означающего «направление на голову»/«путь над головой». В средневековье в течение XIV века это слово через латынь и, возможно, через староиспанский язык попало в Европу. Оно некорректно трансформировалось этими книжниками в 'самт' («направление») и неправильно писалось ими как 'сенит'. Через старофранцузский и среднеанглийский слово 'сенит' окончательно превратилось в XVII веке в современное слово 'зенит'.[2][3]

                                  По-арабски зенит пишется zawâl и означает «закат», т.е. момент, когда солнце заканчивает подъём и начинает своё снижение.
                                  Ответить
                                  • можно было бы ограничиться ссылкой, кстати

                                    > По-арабски зенит пишется zawâl
                                    эти арабы случайно не в Польше живут? :-)

                                    Зато "надир" передали без искажений.
                                    Ответить
            • Как ни странно, оф. справки по 1С я не нашел, а все, что нагуглилось по `1С оператор' подразумевало, что оператор, это человек, который пишет на 1С. Оф. сайт предлагает пройти курс, чтобы овладеть искусством... :)
              Ответить
          • К чему вы это пишете? Спорите здесь с автором статьи в Википедии (между прочим, он здесь не неправ)?

            Statement в советской специализированной литературе переводилось как «оператор».
            Ответить
            • >в советской специализированной литературе
              а как обстояли дела при царской России?
              Ответить
              • Из словаря Словарь Даля

                операция

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

    Добавить комментарий