2014-12-12 6 views
0

Я изучаю код в академии Хан. Он использует обработку в качестве базового языка. Я узнал, что Java не имеет функции goto. Затем, как реализовать функцию goto с помощью обработки. Пояснение со сниппетом оценено.Как использовать goto-подобные функции в обработке?

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

/* Returns either the index of the location in the array, 
 
    or -1 if the array did not contain the targetValue */ 
 

 
var doSearch = function(array, targetValue) { 
 
    var min = 0; 
 
    var max = array.length - 1; 
 
    var guess; 
 

 
    //startover: 
 

 
    if (guess === max || guess === min) { 
 
     //goto notFound; 
 
    } 
 

 
    guess = round((min + max)/2); 
 

 
    if (targetValue === array[guess]) { 
 
     return guess; 
 
    } else { 
 
     if (targetValue > array[guess]) { 
 
     min = guess + 1; 
 
     //goto startover; 
 
     } else { 
 
     max = guess - 1; 
 
     //goto startover; 
 
     } 
 
    } 
 
    } 
 
    //notFound: 
 
return -1; 
 
}; 
 

 
var primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 
 
    41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97 
 
]; 
 

 
var result = doSearch(primes, 73); 
 
println("Found prime at index " + result); 
 

 
//Program.assertEqual(doSearch(primes, 73), 20);

+1

Не использовать goto. он убивает поток выполнения, очень неэффективен, не читается http://www.drdobbs.com/jvm/programming-with-reason-why-is-goto-bad/228200966 – kamoor

+1

Лучше спросить о конкретной проблеме или идее, которую вы имеете , а не спрашивать о языковой функции, которая не существует. Обработка основана на Java, и оба они не имеют goto, поскольку они являются структурированными языками. Возможно, работайте над некоторыми учебниками по обработке? https://www.processing.org/tutorials/ – jdv

+1

Я занимаюсь кодированием на C++ уже более десяти лет. Единственный раз, когда я видел 'goto', используемый таким образом, который на самом деле * нужен *, был' goto', был в коде парсера, автогенерированном YACC или BISON. Разработчики почти повсеместно соглашаются с тем, что 'goto' не стоит проблем, которые он вызывает, и его почти всегда следует избегать. –

ответ

0

Лучшее, что вы, вероятно, могли бы сделать, это использовать цикл и использовать break или continue для goto s.

for(var unusedVariable = 0;1==1;unusedVariable++){//equivalent of "startover:" 
    if(condition1){ 
     continue;//goto startover; 
    } 
    if(condition2){ 
     continue;//goto startover; 
    } 
    if(condition1){ 
     break;//goto notFound; 
    } 
}//notFound: 
Смежные вопросы