#actionscript
#actionscript
Вопрос:
На днях я читал июньский номер журнала Wired за 2011 год и наткнулся на рекламу экономического развития Луизианы, предположительно написанную на ActionScript.
Изначально я думал, что это умная реклама, но после ее изучения оказалось, что в коде есть довольно очевидная ошибка.
Мне только кажется, или это break
должно быть return
?
Комментарии:
1. Это должен быть возврат, если только идея не в том, что независимо от того, есть ли у innovator какие-либо из перечисленных интересов, они все равно должны переходить по указанному URL … но это не единственная ошибка. По-видимому, они не могут решить, писать ли они AS2 или AS3, поскольку пробел в нижнем регистре и существование uint указывают на AS3, но navigateToURL существует только в AS2. С другой стороны, возможно, они объявили функцию в другом месте своего кода с именем navigateToURL из ностальгии.
2. Я думаю, вы, возможно, как раз тот парень, которого они хотели бы пригласить проверить возможности в Луизиане — // Видите ли вы эту возможность? С другой стороны, может быть, это не ошибка, и они просто хотят, чтобы все ознакомились с возможностями Луизианы.
3. О, но, несмотря на ошибку и неоднозначную ошибку языка сценариев, я должен отдать им должное за сохранение var n:uint = interests . длина; Это на самом деле обеспечивает повышение производительности во время выполнения в ActionScript… не то чтобы это имело значение для массива из 3 элементов.
Ответ №1:
Я бы назвал это не столько ошибкой, сколько ошибочной логикой … перерыв выведет вас из цикла, но если вы введете эту функцию, вы перейдете по этому URL, независимо от того, заинтересованы вы во всех этих вещах или нет.
Комментарии:
1. «Я бы назвал это не столько ошибкой, сколько ошибочной логикой …» — Я использую это на моей следующей встрече по исправлению ошибок.
2. Да … после того, как я опубликовал это, я подумал про себя, что ошибочная логика, приводящая к непреднамеренным последствиям, в значительной степени представляет собой ошибку.
Ответ №2:
Я бы назвал это ошибкой, поскольку желаемым результатом, скорее всего, было бы перейти по URL, если какой-либо из этих интересов сохранен, и ничего не делать, если ни один из них не сохранен. Таким образом, я бы изменил логику на следующую (игнорируя на данный момент проблемы, упомянутые в комментарии от scriptocalypse):
if (this.innovator.hasInterestIn(interest[i])){
navigateToURL("www.OpportunityLouisiana.com/digital");
return;
}
Конечно, в рекламе это выглядело бы не так хорошо, поскольку URL-адрес не был бы виден внизу кода. Возможно, лучшей альтернативой было бы организовать логику в цикле следующим образом:
if (this.innovator.hasInterestIn(interest[i])){
break;
} else if (i == n-1){
return;
}
Комментарии:
1. Я не согласен, желаемый результат, вероятно, заключается в переходе по URL, если все три верны, а не только один из них. В противном случае цикл просто неправильный на новом уровне.
2. @vakio: Вы правильно подметили. Если это так, то
break;
определенно должно бытьreturn;
.
Ответ №3:
Да, это должно быть возвращением. Прямо сейчас, в существующем виде, navigateToURL запустится, даже если у пользователя нет ни одного из интересов.