2012-01-24 2 views
0

Я работаю на языке, где нет goto, jump функция. Например, Matlab. Не могли бы вы помочь мне в том, как избежать его использования? Есть ли простой трюк, решающий мою проблему?Альтернативы команд goto и jump

+4

Если нет 'goto' в MATLAB, то вы не должны иметь никаких проблем избежать его;) – Chris

+1

возможного дубликата [Перейти в м-файле] (HTTP: // StackOverflow .com/questions/1082605/jump-in-m-file) – gnovice

ответ

1

Ну, в первую очередь, вы можете также задать вопрос без тег , вы можете получить более качественные ответы. Это связано с тем, что этот вопрос является общим для почти всех современных языков.

Вместо goto и jump вы должны использовать либо условные, как if, if-else или петли, как while, for, в зависимости от того, что вы хотите достичь.

Отъезд GOTO still considered harmful?, Why is goto poor practise?.

3

Вы должны рассмотреть возможность использования break и continue

Вместо:

for ... 
    ... 
    if ... 
     goto nextstuff: 
    end 
end 
nextstuff: 

Вы можете сделать:

for ... 
    ... 
    if ... 
     break 
    end 
end 

И как @andrey сказал, вы часто можете заменить goto на if-else

Вместо того чтобы делать:

if cond 
    goto label 
end 
... 
foobar() 
... 
label: 
foobar2() 

вы можете сделать:

if ~cond 
    ... 
    foobar() 
    ... 
end 
foobar2() 

При использовании Гото, чтобы вернуться, вы можете заменить его на некоторое время:

Вместо того чтобы делать:

redothat: 
foobar() 
... 
if cond 
    goto redothat; 
end 

Вы можете сделать:

while cond 
    foobar() 
    ... 
end 
+0

Большое спасибо за ваш ответ, и я прошу прощения за неправильный тег. Моя проблема в том, что я хочу реализовать диаграмму состояний (решетчатое кодирование), и я должен вернитесь в мой код. Я не знаю, есть ли что-то очевидное, где я не вижу (вполне возможно), но я не могу найти решение. –

+0

Вы должны более подробно описать вашу проблему, если хотите получить менее общий ответ ... – Oli

+0

У меня есть последовательность из 100 случайных (двоичных) чисел. –

1

Как @Andrey упоминание вы можете использовать if или if-else заявление. Во многих случаях петли, такие как while, for - это индивидуальные замены на if-else и goto.

Вы также должны принять во внимание использование break и continue заявлений в качестве @Oli, упомянутых выше.

В некоторых редких случаях вы можете использовать исключение (я не знаю, поддерживает ли Matlab), чтобы «вернуться». Это несколько противоречиво, но, может быть, в вашем случае это подойдет.

redothat: 
foobar() 
... 

А внутри Foobar() в каком-то месте у вас есть

if cond 
    goto redothat; 
end 

вы можете сделать:

while(true){ 
try { 
    foobar(); 
    ... 
    break; 
} 
catch(YourApplicationException e){ 
    //do nothing, continiue looping 
} 
} 

А внутри Foobar() в каком-то месте у вас есть

if cond 
    throw YourApplicationException(); 
end 

Или вы можете сделать что-то вроде этого:

вы можете сделать:

boolean isOk = false; 
while(! isOk){ 
try { 
    foobar(); 
    ... 
    isOk=true; 
} 
catch(YourApplicationException e){ 
    //do nothing, continiue looping 
} 
}