gns_ua: (Default)
gns_ua ([personal profile] gns_ua) wrote2011-09-07 05:11 pm

(no subject)

то что ты сейчас пытаешься сделать (использовать ассемблер в программах на Delphi) — ошибка. Генетическая. Российская. Всей образовательной системы страны. Таких преподов надо увольнять сразу же. Если выжигать эту дурь из мозгов каленым железом не получается. Правильно им копейки платят. Они это заслужили.

http://lurkmore.ru/Pascal#.D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D1.80.D1.8B_.D0.9F.D0.A0.D0.90.D0.92.D0.94.D0.AB_.D0.BF.D1.80.D0.BE_Delphi

А я говорил!

[identity profile] ctype.livejournal.com 2011-09-08 04:03 pm (UTC)(link)
потому что нарушает "линейность" логики, как и goto

[identity profile] gns-ua.livejournal.com 2011-09-08 04:04 pm (UTC)(link)
O_o

[identity profile] st-archer.livejournal.com 2011-09-08 04:34 pm (UTC)(link)
Ничуть. Вы блок-схемку простую нарисуйте для такой процедуры.

[identity profile] ctype.livejournal.com 2011-09-08 05:16 pm (UTC)(link)
goto в блок-схемках также хорошо выглядит :)

[identity profile] st-archer.livejournal.com 2011-09-08 05:18 pm (UTC)(link)
Ненене. В случае return концовка-то у всех будет общая :)

[identity profile] ctype.livejournal.com 2011-09-08 05:25 pm (UTC)(link)
это в случае goto EndOfFunction концовка будет общая :)
а в случае return мы получаем несколько семантически несвязных концовок

[identity profile] gns-ua.livejournal.com 2011-09-08 05:37 pm (UTC)(link)
o_0

Смысл существования функции - вернуть результат. Она его возвращает. В зависимости от разных условий, результат может возвращаться разный.

def mod(a):
    if a > 0:
        return a
    else:
        return -a

Ну давай на стеке поднимать int res, присваивать его в двадцати местах делать, а потом извращаться с готой либо управляющими конструкциями чтобы оказаться в конце и вернуть res. Правда, где этот res образовался потом хуй отследишь, но кого это волнует, лишь бы ретурнили его в одном месте.

Бывает конечно, иногда, что надо не просто ретурн а ещё и финалайзить, снимать мутексы какие-нибудь и всё такое. Решается return finalize([мойтекущийрезультат]). Где финалайз - ЛОКАЛЬНАЯ субфункция.

[identity profile] ctype.livejournal.com 2011-09-08 05:55 pm (UTC)(link)
так я не спорю. я и к goto спокойно отношусь, если оно по месту. да что уж там, ассемблерные вставки и то, редко-редко но нужны

но с точки зрения "расовой чистоты" return нарушает линейность flow , вместе со всем комплексом проблем goto - т.е. в последующем сопровождении ведет к ошибкам исполнителя

[identity profile] gns-ua.livejournal.com 2011-09-08 06:00 pm (UTC)(link)
Да нет никакой линейности флоу.

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

Давай, взорву мозг :

def myfunc(a,b):
return someotherfunc

myfunc(a,b)(args)

Расскажи про линейность флоу, неподдерживаемый спагетти и ошибки исполнителя %)

[identity profile] gns-ua.livejournal.com 2011-09-08 06:04 pm (UTC)(link)
Проблема гото не в том что они нарушают линейность. Проблема в том, что они не нужны. Вообще :)

[identity profile] ctype.livejournal.com 2011-09-08 06:40 pm (UTC)(link)
множественные ретурны это частный случай гоуту , эквивалентный, со всеми вытекающими.
не понимаю как можно ругать одно из них и защищать другое

[identity profile] v-l-a-d.livejournal.com 2011-09-08 08:15 pm (UTC)(link)
операторы циклов и вызовы подпрограмм/методов - это в какой-то степени тоже частный случай гоуту

[identity profile] st-archer.livejournal.com 2011-09-08 05:54 pm (UTC)(link)
Эм, ну да, оди фиг, вощимто. Просто блок-схема то подразумевает понятя "начало"и "конец", а оно таки конец :) Вопрос в том, что все ретурны сходятся в одной точке - и соответственно, спагетти-кода не будет. Впрчоем, как и в случае использования гото. Тут - вопрос вкуса.

[identity profile] gns-ua.livejournal.com 2011-09-08 05:30 pm (UTC)(link)
Хлопцы, что вы курили и где такое дают ?

Какие, в жопу, блоксхемы? На блок-схеме вот это говно совершенно идентично вот этой питонятине:

def test(a):
    if a > 30:
        print "a>30"
    elif a > 20:
        print "A>20"
    elif a > 10:
        print "A>10"
    else:
        print "A TOO SMALL!"
        return False
    # maybe something more
    print "DONE"

[identity profile] st-archer.livejournal.com 2011-09-08 05:54 pm (UTC)(link)
Ээээ, ну да, действительно. С гото просто почти не работал :)