Выполнить(кусокКода)

Тема в разделе "1C и всё что с ней связано", создана пользователем tanat, 31 авг 2009.

  1. tanat

    tanat Well-Known Member

    Регистрация:
    2 мар 2007
    Сообщения:
    265
    Симпатии:
    0
    При решении ряда задач, поставленных руководством, использовал этот оператор. Недавно общался с коллегой, который заверил меня в том, что такой оператор используют "дубы"). На вопрос "почему" ответа развернутого не получил.

    Может Вы, уважаемые, подскажете, что плохого в этом операторе?

    П.С:В моем случае куски исполняемого кода формируются програмно, не используя редакрирования пользователем.
     
  2. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Если ваш коллега не привел аргументов, можно вообще не обращать внимания на подобные заявления. Если аргументы есть, давайте их в студию - будем обсуждать.
     
  3. Zab

    Zab Well-Known Member
    1C Team

    Регистрация:
    7 авг 2006
    Сообщения:
    583
    Симпатии:
    0
    Даже многострадальный Goto, считающийся якобы плохим тоном в программировании, можно применять к месту и с умом. И это главное. Нет плохих конструкций в языке, есть неправильное их применение.
    Если колега приведет реализацию этого алгоритма без использования Выполнить() и алгоритм окажется хотябы таким-же по скорости/понятности/универсальности, можете с ним соглашаться.
    Недостаток оператора в том, что синтакс-анализатор платформы не проверяет правильность выполняемого кода. "дубы" любят такие конструкции за то, что они помогают реализовывать функционал без знания более подходящих механизмов языка.
     
  4. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Пример в студию!
     
  5. tanat

    tanat Well-Known Member

    Регистрация:
    2 мар 2007
    Сообщения:
    265
    Симпатии:
    0
    Главным козырем в его аргуметах является, как уже подметили, отсутствие проверки исполняемого кода. Например. пользователь програмно может удалить ряд данных.

    В моем случае - такое не допускается, т.к. весь кусок кода заполняется програмно по определенным правилам. Однако, в дальнейшем планировалось использовать и возможность указания кода "вручную". Однако есть возможность загрузить код из файла ( пока от пользователей этот механизм закрыт) - и вот в этом случае, думаю, придется писать некий "переводчик", т.е. из указанного файла брать код, по определенным правилам и соответствиям составлять исполняемый код, а уже затем его, собственно, исполнять. Но пока конкретных реализаций нету - только в теории.
    Лично я вообще не представляю, как программу заставить "плясать под мою дудку" без этого оператора без конфигуратора. Как и коллега, впринципе).
     
  6. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Хорошая программа - это, в первую очередь, работающая программа.
    Во вторую - оптимальная по коду и быстродействию, в третью - красивая по написанию и интерфейсу и удобная в использовании.
    Что касается Goto, в Паскале, помнится, есть замечательный сложный оператор, позволяющий сразу выбирать нужную веточку для перехода, что ж в нем плохого ?
     
  7. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Я бы не стал смешивать GoTo и Case.
    В Case как раз видно, при каких условиях какой кусок кода будет выполнен. И программа достаточно читабельна получается. И, самое главное, не получится поставить метку перехода дважды (будешь удивлен, но не только интерпретаторы, некоторые компиляторы этого не отслеживают). Кроме этого, используя ГоТу, очень чревато получить зацикливание.
    Хотя, у Case тоже есть свои нюансы... В некоторых компиляторах секция default выполняется только в том случае, когда не подошло ни одно условие, а в некоторых, выполняется всегда, после выполнения куска кода, подпадающего под условие. В этом случае приходится учитывать специфику компиляторов.

    Кстати, если кто помнит...
    Раньше кроме while ... do была еще конструкция do ... while
    Вот только точно не помню в каком это было языке... В общем, если мне не изменяет склероз, ее даже убрали из ANSI, потому как приводила к "незапланированному" выполнению кода из-за невнимательности и усложнению процесса отладки.
     
  8. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    В Алголе-60 и в ПЛ/1 (если мне склероз не изменяет ;) )
    А вообще-то при желании можно обойтись без любого оператора, если как следует постараться
    А про это я, увы, уже забыл - последний код на Паскале в 1996м писал
     
  9. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Не приходилось охотиться на этих зверей, но я таки вспомнил, где присутствуют конструкции do ... while: PHP и Java.
    И признаю, что ошибался на счет того, что их убрали из стандартов.
     
  10. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    а назве в С++ do...while не было? что-то уже плохо помняться студенческие годы)))
     
  11. Hryv

    Hryv Гость

    в С/С++ есть while(){} и do{}while()
     
  12. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    вот и я об этом
     
  13. Hryv

    Hryv Гость

    KiR, я то тебя понял, просто уточнил для всех
     
  14. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Тоже склероз, но на сей раз в раннем проявлении ? :mellow:
     
  15. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    выпито было много наверное!))))
    но ведь не забыл таки, правильно написал)
    приписку на всяк случай сделал чтобы вслучае если это таки неверно сослатся на склероз))
     

Поделиться этой страницей