TL: DR / совет по оптимизации: вам не нужно делать ничего особенного, чтобы повысить производительность. if(condition) return
внутри внутреннего l oop обычно, по крайней мере, так же эффективен, как if(condition)break;
для достижения конца функции.
Помещение вложенных циклов внутрь функции, чтобы вы могли использовать return
как многоуровневый break
- это хороший способ эффективно express логика c без goto
, простой для людей и простой для составителей / интерпретаторов.
Создание l oop условия, более сложные, чтобы избежать нескольких return
операторов в одной функции, не влияют на производительность.
Обычно нет, return
в середине функции принципиально не отличается или более или менее эффективный, чем достижение неявного возврата в конце. И явное возвращение в bottom функции также не является особенным.
(Мы говорим о я предполагаю, что void функции, которые никогда не возвращают значение, возвращают значение иначе, чем не возвращают значение.)
Реструктуризация вашего кода до break
из всех oop и достижение неявного * 10 24 * в нижней части функции не более эффективна (но может легко быть меньше эффективна в некоторых интерпретируемых языках, особенно если они не являются JIT.), Например, если интерпретатор выполняет переход внутри функции и затем должен сделать еще один прыжок. (Хороший опережающий компилятор или JIT-оптимизатор в любом случае может видеть, что происходит, и создавать хороший машинный код.)
Некоторые компиляторы / интерпретаторы могут обрабатывать return
, просто переходя к общему блоку очистки (эпилог), который разделяют все return
заявлений. Но возможно дублирование хвоста : при компиляции в машинный код функция может иметь несколько копий инструкций эпилога + ret
, доступных с разных путей.
(JavaScript реализации do обычно JIT-функции к машинному коду; IDK примерно LUA. И, конечно, они могут выполнять встроенные функции. return
операторы в функциях, которые встроены, могут быть просто переходами или могут быть полностью оптимизированы.)