Альтернативы командам goto и jump - PullRequest
0 голосов
/ 24 января 2012

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

Ответы [ 3 ]

3 голосов
/ 24 января 2012

Вы должны рассмотреть возможность использования 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()

Когда вы используете goto для возврата, вы можете заменить его на некоторое время:

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

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

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

while cond
  foobar()
  ...
end
1 голос
/ 25 января 2012

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

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

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

redothat:
foobar()
...

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

if cond
   goto redothat;
end

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

1020 *

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

if cond
  throw YourApplicationException();
end

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

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

boolean isOk = false;   
while(! isOk){
 try {
   foobar();
   ...
   isOk=true;
 }
 catch(YourApplicationException e){
   //do nothing, continiue looping
 }  
}
1 голос
/ 24 января 2012

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

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

Выйти GOTO все еще считается вредным? , Почему goto плохая практика? .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...