IT в России и мире в реалиях мирового кризиса
1,401,246 8,469
 

  Jack Doe ( Слушатель )
02 мар 2016 19:31:12

goto

новая дискуссия Дискуссия  715

Я предлагаю все модные/устоявшиеся суждения о хороших/плохих практиках программирования пропускать через призму критического мышления.

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

  • для перехода к эпилогу функции (когда вместо return мы делаем goto QUIT; а в точке выхода у нас есть несколько строк деинициализации)



goto демонизировали как типа антипаттерн в те времена, когда из управляющих конструкций были только IF и GOTO, до того как Дейкстра изобрел структурное программирование с циклами. Тогда действительно if/goto образовывали лапшу, в которой разобраться было крайне сложно.

Управляющие конструкции появились, goto перестали пользоваться, а предрассудок остался. goto крайне удобен, просто им нужно пользоваться умело. Я им пользуюсь, когда нужно.
  • +0.03 / 3
  • АУ
ОТВЕТЫ (108)
 
 
  slavae ( Слушатель )
02 мар 2016 22:28:43

В Delphi для этого используется try finally. Если в блоке try вписать exit, то он перебрасывает не на выход процедуры, а на finally.
  • +0.02 / 2
  • АУ
 
 
  Alexxey ( Слушатель )
02 мар 2016 23:03:51

Смысл try finally в другом. Эта конструкция гарантирует выполнение кода в блоке finally в любом случае, как бы там не сложились дела в блоке try. Например, освободить память даже в случае возникновения исключения в try. Часто применяется как try except finally, для обработки исключения. Никаким goto такую конструкцию не заменить.
  • +0.00 / 3
  • АУ
 
 
 
  slavae ( Слушатель )
02 мар 2016 23:28:05

Да что ж такое-то! Я что, писал, что только для этого, что ли? Ещё смысл мне будут рассказывать.
Не можете правильно применить, не применяйте.
И напишите мне пример использования в Дельфи try except finally. Нет таких блоков в Дельфи. Перед тем как учить, себя проверьте.
Есть try except и есть try finally.
  • +0.01 / 1
  • АУ
 
 
 
 
  Alexxey ( Слушатель )
02 мар 2016 23:49:42

Не расстраивайтесь. Если я написал что-то, известное Вам и так, извините за занудство.

Разумеется имеется в виду
try
   try
   ...
   except
   ...
   end;
finally
...
end;

Вы же тоже try finally без end написали. Докапываемся?
  • +0.01 / 1
  • АУ
 
 
 
 
  Sewer Endemic ( Слушатель )
03 мар 2016 02:51:15

try except finally - это из пайтона, скорее всего.Улыбающийся Полностью оно может выглядеть как try except(сколько нужно, впрочем, как и в обжект паскале) else finally
На все, так сказать, случаи жизни. Веселый
  • +0.00 / 0
  • АУ
 
 
 
  Lapsha ( Слушатель )
02 мар 2016 23:30:42


В Java есть реализация goto, только неявная:


for(bullshit1...) {
    for(bullshit2...) {
        blah-blah...
        break label1;
    }
}
blah-blah...

label1:
blah-blah...

Примерно то же самое и с continue.
  • +0.00 / 0
  • АУ
 
 
 
 
  Alexxey ( Слушатель )
03 мар 2016 00:01:46
Сообщение удалено
Alexxey
03 мар 2016 02:01:48
Отредактировано: Alexxey - 03 мар 2016 02:01:48

  • +0.00
 
 
 
 
 
  Lapsha ( Слушатель )
03 мар 2016 00:05:25


Это чё было?...
  • +0.00 / 0
  • АУ
 
 
 
 
 
 
  Alexxey ( Слушатель )
03 мар 2016 00:17:00
Сообщение удалено
Alexxey
03 мар 2016 02:01:48
Отредактировано: Alexxey - 03 мар 2016 02:01:48

  • +0.00
 
 
 
 
 
 
 
  Lapsha ( Слушатель )
03 мар 2016 00:20:10




Yes, it is!

И чо? Главный-то вопос был именно этот: и чо?
  • +0.00 / 0
  • АУ
 
 
 
 
 
 
 
 
  Alexxey ( Слушатель )
03 мар 2016 00:33:49
Сообщение удалено
Alexxey
03 мар 2016 02:01:48
Отредактировано: Alexxey - 03 мар 2016 02:01:48

  • +0.00
 
 
 
 
 
 
 
 
 
  Lapsha ( Слушатель )
03 мар 2016 00:45:49


А, вот в чем дело!


Тут случилась путаница: я отвечал не Вам, а на предыдущий пост о недопустимости goto в Java.
Поэтому слегка охренел от наезда с этим try/finally.
  • +0.00 / 0
  • АУ
 
 
  adolfus ( Слушатель )
03 мар 2016 03:35:59

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

void fooblia() {
   int rc;
   if (0 !=(rc = call_1())) {
     goto quit;
   }
   if (0 != (rc = call_2())) {

     goto quit;
   }
   ...
   if (0 != (rc = call_M())) {

     goto quit;
   }
   rc = call_N();
quit:
   check_rc(rc); // вызов обработчика ошибок
   return;
}

Ну что может быть проще, понятнее и красивее?
  • +0.01 / 1
  • АУ
 
 
 
  Lapsha ( Слушатель )
03 мар 2016 03:40:12


switch-case-default
  • +0.04 / 3
  • АУ
 
 
 
 
  Valery ( Слушатель )
03 мар 2016 04:57:30

Далеко не всегда.
Предположим, что Вам нужно зарезервировать две-три области памяти из разных зон виртуальной памяти и контекст сетевого соединения. Можно по разному извратиться. Но желательно понимать, во что это превратит компилятор.
Неоднократно наблюдал результаты в IDA. Если человек не понимает, как будет работать его код, то и результаты соответствующие...
Java и С# хорошие примеры тех  языков, где люди ничего не понимают (скорее всего сознательно, для утилизации избыточной мощности вычислительной системы) как в том, как работает компьютер, варианты распределения памяти...
  • +0.02 / 1
  • АУ
 
 
 
 
 
  Lapsha ( Слушатель )
03 мар 2016 07:36:17

К сожалению, ничего не понял.


Позабавил тезис о сознательной утилизации избыточной мощности вычислительной системы.
Воздержусь от обзываний и дразнилок. Но - большим напряжением воли.
  • +0.00 / 0
  • АУ
 
 
 
 
  adolfus ( Слушатель )
03 мар 2016 05:04:35

1) switch-case-default -- это ветление на параллельные альтернативы, а тот код, что я привел -- решето исключений.
2) switch-case-default не может заменить решето из if() либо это будет выглядеть некрасиво. Честно говоря, смысла в свиче особого нет -- if-elseif-else его включают, а наоборот -- никак.
  • +0.01 / 1
  • АУ
 
 
 
 
 
  Lapsha ( Слушатель )
03 мар 2016 07:34:11

Частично (на 60%) согласен. Я невнимательно фтыкал в код. 

Switch часто лучше if-else if..., если условия есть однородный результат. Например, при перечислении условий для одного и того же исхода: case 1,2,3...
В данном конкретном случае это можно сделать так:

void fooblia() {
   int rc;
   switch( 0 !=(rc = call_1())
        || 0 != (rc = call_2())
        || 0 != (rc = call_M())) {
     case 0:
       rc = call_N();
   }
   check_rc(rc);
}

Но, действительно, лучше (именно здесь) через if:

void fooblia() {
   int rc;
   if( !(     0 !=(rc = call_1())
        || 0 != (rc = call_2())
        || 0 != (rc = call_M())  )  ) {
  
       rc = call_N();
   }
   check_rc(rc);
}
  • +0.01 / 1
  • АУ
 
 
 
  Superwad ( Слушатель )
03 мар 2016 11:06:33

Procedure Test;
Begin
// пишем нужную хрень
If Если надо срочно выйти> Then Exit;
// Дальше хрень
End;
  • +0.00 / 0
  • АУ
 
 
 
 
  LightElf ( Слушатель )
03 мар 2016 18:20:18

Вы, в пылу религиозной борьбы, не заметили действий между меткой quit: и окончанием функции. Ваш код не эквивалентен исходному примеру.
  • +0.01 / 1
  • АУ
 
 
 
 
 
  Superwad ( Слушатель )
03 мар 2016 18:47:22

1) Я не религиозный фанатик. Я фанат КАЧЕСТВЕННЫХ продуктов. И Си/Си++ и на их базе языки к ним не относятся. Ибо слишком геморройные. А результат на выходе - один. Так зачем пользоваться более геморным инструментом, если можно использовать более простым и качественным??? (Бритву Оккамы никто не отменялУлыбающийся ).
2) Я просто привел один из частных случаев использования кода. Я стараюсь задачу разбить на несколько подзадач (так называемый Unix Way принцип). Так что это вполне приемлемый вариант.
  • +0.00 / 0
  • АУ
 
 
 
 
 
 
  Lapsha ( Слушатель )
03 мар 2016 21:52:23


Именно религиозный фанатик.

Один сплошной негатив о по какой-то причине не нравящемся языке программирования. С приведением не доводов в виде фактов, а каких-то натужных фантазий.
Объясните тогда, зачем Вы пользуетесь продуктами, созданными на этом "геморном инструменте", такими как: операционной системой вместе со всеми драйверами и контроллерами, браузером, протоколом TCP/IP и его надстройкой HTTP. Все это Вы используете для засылки на этот форум сообщений.
Почему, согласно Вашим же словам, Вы не используете операционки, драйверы, браузеры, сетевые протоколы и т.п., созданные более простым и надежным инструментом - Паскалем?

Что касается качества продуктов, то компиляторы и сборщики С/С++ уж точно гораздо лучше вылизаны, чем паскалевские. По простой причине: С/С++ - основной промышленный язык разработок.

Вы там ранее недостижимо искрометно юморили по поводу софта для Ф-35. Так вот: армейцы в Штатх и НАТО пользуют язык Ада, а не С/С++.
  • +0.01 / 1
  • АУ
 
 
 
 
 
 
 
  TAU ( Слушатель )
04 мар 2016 04:19:08

Теперь к Вам, простите, тот же вопрос: Вы с чего же это взяли??? Еще как и Си, и С++ используется. И JOVIAL. И много чего еще, зоопарк целый.
  • +0.00 / 0
  • АУ
 
 
 
 
 
 
 
 
  Lapsha ( Слушатель )
04 мар 2016 05:43:07


Взял тупо из принятого в 91-м году закона. Известном в народе как "Ada mandate".

http://www.dwheeler.com/lovelace/doduse.htm


Цитата: ЦитатаNotwithstanding any other provisions of law, where cost effective, all

Department of Defense software shall be written in the programming

language Ada, in the absence of special exemption by an official
designated by the Secretary of Defense.


Вот скан публикации закона Конгресса (читать с Programming Language... и далее):
Here
Только Ада. Исключения - только за официальной подписью министра обороны.

Там, в первой ссылке есть результаты исследования за 95-й год на тему какие языки использовались в оборонке на момент исследования. Так вот, тогда они распределились так: по числу строк кода Ада была уже 2-й после КОБОЛа, а по числу ответов автоматического распознавания софта была уже первой, потом C 89, COBOL pre-85, COBOL 85, и только потом С++. И это всего через 4 года после принятия закона. Сейчас, еще через 21 год, там почти ничего кроме Ада не осталось, только на старых железяках.

Разрабатывался Ада именно по заказу и финансированию Пентагона.
НАСА тоже давно переключилось на Ада.
Ада, кстати говоря, в основе имеет Паскаль.
  • +0.00 / 0
  • АУ
 
 
 
 
 
 
 
 
 
  TAU
  • Загрузить
 
 
 
 
 
 
 
 
 
 
  Lapsha
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  Lapsha
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
  adolfus
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
  TAU
  • Загрузить
 
 
 
 
 
 
 
  Superwad ( Слушатель )
04 мар 2016 10:22:25

Ну я на деле перфекционист. Стремлюсь к более совершенным вещам. Если что-то не устраивает, то списывается в утиль без сожаления. Си и Со из этого разряда. Не соответствуют МОИМ критериям. И дело не в идеологии, а дело в удобстве и затратах. Не люблю сильно затратные вещи/технологии. Чем проще и лучше результат - тем лучше для меня. И это никакая не религия. Если бы Си соотвествовал этим критериям - использовал бы его. А так, в треш его.
  • +0.00 / 0
  • АУ
 
 
 
 
 
 
 
 
  Lapsha ( Слушатель )
04 мар 2016 11:19:47

Если перфекционист, то почему продолжаете пользоваться продуктами, созданными именно этими несовершенными затратными технологиями? 

Перфекционист на деле, а не в декларациях на публику, не стал бы пользоваться подобными вещами.

Пользоваться нужно продуктами, созданными на Паскале и Обжект Паскале. 

Это будет незабываемый и яркий опыт, просто уверен в этом!
  • +0.00 / 0
  • АУ
 
 
 
 
 
 
 
 
 
  Superwad ( Слушатель )
04 мар 2016 12:41:13

Великолепный пример, в своё время использовал почтовик The Bat! Написан на Delphi? очень качественная вещь. Просто я решил уважать труд, где это можно, настоящих программистов, и плачу только за действительно, качественный, с моей точки зрения ПРОДУКТ. Но сегодня появилось большое количество вполне функциональных продуктов СПО, почему ими не пользоваться?
  • +0.00 / 0
  • АУ
 
 
 
 
 
 
 
 
 
 
  LightElf ( Слушатель )
04 мар 2016 14:00:46

Они же на богомерзком C написаны! Не по феншую! Как можно? Доколе!Улыбающийся
А кроме шуток: слабо аналог паскалевской WriteLn на паскале написать?
  • +0.00 / 0
  • АУ
 
 
 
 
 
 
 
 
 
 
 
  Igor_FF ( Слушатель )
04 мар 2016 15:18:37

На каком из?
  • +0.00 / 0
  • АУ
 
 
 
 
 
 
 
 
 
 
 
 
  LightElf ( Слушатель )
04 мар 2016 16:01:22

Шо, таки появились функции с переменным числом параметров? Или вы про костыли типа открытых массивов?
  • +0.00 / 0
  • АУ
 
 
 
 
 
 
 
 
 
 
 
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
  TAU
  • Загрузить
 
 
 
 
 
 
 
  Superwad ( Слушатель )
04 мар 2016 11:37:26

Начнём с того, что я использую только то что мне нравится. Если есть лучшая альтернатива, я буду использовать это. Если нет - ничего не поделаешь.
Я, например, отказался от винды, потому что это помойка, офис от них - ушел туда же. На работе приходится использовть XP, потому, что пока не заменили на другое.
Насчет компилятора и типа языка. Они должны решать определенные задачи.
Я выделяю три типа ошибок программного кода:
1. Синтаксические
2. Логические
3. Системно - архитектурные.
Первый тип ошибок устраняет компилятор (его "вылизанность"). Не более того. Временные затраты - 17 %.
Второй тип ошибок позволяет выявить уже сам тип языка + составление алгоритмических схем (например, советский/российский язык ДРАКОН). Вот тут тратится больше времени на программу - 70 %.  Вот почему Object Pascal тут выигрывает у Си. У него это показатель пониже будет на сопоставимой задаче.
Третий вид ошибок - это изначально парадигма всего продукта - это всецело зависит на сегодня от человека, который проектирует саму систему.
Кстати, из-за второго типа ошибок и выявляется проблемы с уязвимостью кода и, очень меньшую часть, от первого типа ошибок. А это приблизительно до 17 % успешных атак взлома кода. Не так уж и много, но и не мало.
Пример третьего вида ошибки - это виндовс. ибо нормальной четкой архитектуры нет - сплошные костыли, которые ещё как-то работают.
Если не нравится, что компилятор Паскаля тянет херову тучу ненужного кода, всегда есть возможность использовать не VCL библиотеки, а KOL.
И да, графическая морда в БД на сегодня это довольно большой класс программ, особенно специализированных. Я , например, на работе под себя, использую практически 100 %. Специфика. И Lazarus очень даже неплохо с этим справляется. Да и возможностей у него хватает. Для много чего. Не только для GUI+БД. Кстати, я ещё освоил многопоточность на нём. В некоторых вещах очень полезная штука (хотя очень тяжелая для отладки, да ещё и непредсказуемая местами).
Кстати, как-то заглянул в базовые классы VCL Delphi, так там до 50 % кода на ASM. И ничего, работает всё.
Кстати, Лазарус позволяет писать смешанный код с использованием вставок на ASM и Си, так как компилятор основан на GCC. Меня это не напрягает нисколечко.
Ну как-то так.
  • +0.00 / 0
  • АУ
 
 
 
 
 
 
  LightElf ( Слушатель )
04 мар 2016 01:05:32

1) Пользоваться надо тем инструментом, который позволяет решать задачу быстро и качественно. Утверждение,  что begin..end гораздо гораздее, чем {..} заставляет сильно смеяться.  Это именно что религиозное рвение и не более того.
2) в исходном примере goto используется для перехода в точку, где выполняются завершающие действия: закрытие файлов, освобождение занятых ресурсов и т.д. Вы привели контр -пример, в котором эти необходимые действия не выполняются. Т.е. контр-пример не эквивалентен исходной задаче и потому ничего не доказывает и не опровергает. 
3) обойтись без goto можно. Но цена может быть весьма велика именно в плане сопровождения кода. "goto fatal_error" гораздо понятнее и нагляднее, чем куча мутных флагов с десятком условий.
  • +0.04 / 4
  • АУ
 
 
 
 
 
 
 
  globagast ( Слушатель )
04 мар 2016 09:30:00

func()
{
   выделение всего
   unsafeFunc()
   очистка всего от всего
}

unsafeFunc()
{
  if ..... exit;
}
не прокатит?
А еще unsafeFunc в тру...финал обернуть. Совсем хорошо станет.
  • +0.01 / 1
  • АУ
 
 
 
 
 
 
 
 
  LightElf ( Слушатель )
04 мар 2016 11:21:46

Иногда да, иногда - нет. "Все выделенное" надо как-то передать в unsafe func, 100500 параметров? Указатель на структуру? куча мутных телодвижений только для того, чтобы соблюсти религиозный запрет. try/finally - это либо C++, либо нестандартное расширение для C. Требует поддержки рантайма, что не всегда приемлемо. Одна из фишек C - способность создавать код, работающий на голом железе. 
  • +0.01 / 1
  • АУ
 
 
 
 
 
 
 
 
 
  Поверонов ( Слушатель )
04 мар 2016 11:59:58
Зачем нужен goto в языках программирования ... Если нужно на языке записать сильно нагруженный цикл ( много миллионов раз ) то при использовании внутри цикла вызовов функций или процедур заметно повышаются суммарные накладные расходы ( overhead ) на оформление вызовов ( сохранение контекста, вталкивание аргументов в стэк и т.д. ) Использование goto вместо call в циклах, когда это возможно, повышает быстродействие. Разумеется, разница проявляется лишь на "длинных" циклах, но такие тоже иногда нужны. В циклах компромиссом между call и goto являются inline вызовы, когда всё тело функции компилируется по месту вызова.
  • +0.02 / 1
  • АУ
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  • Загрузить
 
 
 
 
 
 
 
  Superwad ( Слушатель )
04 мар 2016 12:33:08

Насчет скобок - тут играет физиология человека, и нечего смеяться  {  } скобочки ВИЗУАЛЬНО хуже воспринимаются, чем слова Begin  End. Что тут такого религиозного? Чистая прагматика, и ничего больше.
  • +0.01 / 1
  • АУ
 
 
 
 
 
 
 
 
  LightElf ( Слушатель )
04 мар 2016 13:51:20

Есть серьезное независимое исследование, подтверждающее данное утверждение? Или "телефонный опрос показал, что 100% респондентов имеют телефон"?
  • +0.00 / 0
  • АУ
 
 
 
 
 
 
 
 
  Alexxey ( Слушатель )
04 мар 2016 15:03:10

У Вас именно к фигурным скобкам такая неприязнь или вообще ко всяким?
  • +0.00 / 0
  • АУ
 
 
 
 
 
 
 
 
 
  Igor_FF ( Слушатель )
04 мар 2016 17:11:10

Наброшу: скобки - зло, конкатенативные язык рулят! Молящийся
  • +0.00 / 0
  • АУ
 
 
 
 
 
 
 
 
 
 
  Alexxey
  • Загрузить
 
 
 
 
 
 
 
 
 
  • Загрузить
 
 
 
 
 
 
 
 
 
 
  Lapsha
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
  Lapsha
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
  Igor_FF
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  slavae
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  Igor_FF
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  Lapsha
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  Igor_FF
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  sign
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  slavae
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  slavae
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  adolfus
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  Igor_FF
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  Lapsha
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  Lapsha
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  Lapsha
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  Alexxey
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  Lapsha
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
  adolfus
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
  Lapsha
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
  adolfus
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  TAU
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  adolfus
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  Valery
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  adolfus
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  Lapsha
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  adolfus
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  Valery
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  Lapsha
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  Valery
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  adolfus
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  TAU
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  Valery
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  TAU
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  adolfus
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  Valery
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  Lapsha
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  adolfus
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  Lapsha
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  TAU
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  Lapsha
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  adolfus
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  Lapsha
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  TAU
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  adolfus
  • Загрузить
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  TAU
  • Загрузить
 
  TAU ( Слушатель )
04 мар 2016 03:58:47

Вот именно! Правильный подход. И не к одному безусловному переходу. К технике/методам/средствам вообще.
  • +0.00 / 0
  • АУ