Decode,
https://vk.com/video?section=all&z=v...2Fpl_299655110
лол ну тут я обьясняю что есть как бы 2 канала возврата данных из функции, канал ошибок и канал верного исполнения. и обьясняю почему не нужно по каналу верного исполнения передавать данные об ошибке и отличать их от данных верного исполнения, каким-то тимом или значением. во первых потому что нет стандарта, а во вторых потому что return в отличии от throw не поддерживает паттерн всплывания по стеку.
например если match говрит в документации что возвращает массив вхождений регулярки, он обязан его возвращать, а ни какой не null (в случае не нахождения ни одного вхождения).
например если indexOf говорит в докумнетации что он возвращает индекс элемента в массиве, а такой элемент не найден, то indexOf обязан бросать ошибку (по каналу ошибок throw) о том что не смог выполнить свое предназначение, не смог вернуть индекс массива.
тогда программа ожидающая что ВОЗМОЖНО такое что элемента в массиве не найдется, просто отловит исключения и сделает предполагаемые действия которые предполагается делать в таком случае, но если же программа предполагает что элемент в массике ДОЛЖЕН И ОБЯЗАН БЫТЬ, то она остановится так как бросится исключение.
Если оно не бросится мы можем напороться на такую ошибку и неожидаемое поведение:
index = array.indexOf(element)
array.splice(index, 1)
мы хотим удалить элемнет из массива, но если элемент в массиве не будет найден то функция вернет -1
и получается что мы вызовем array.splice(-1, 1) а вызнаете что это фактически очистит массив.
И нам приходится делать проверку
if(index !== -1)
а мы не должны даже думать о таком.
Более того, если мы пишем функцию удаления элемента из массива она даже не должнна перехватывать это исключение! она должна позволить ему всплыть вверх по стеку. мы ведь не смогли удалить элемент как обещали? значит ошибка. а в ошибке челу выше будет понятно почему именно не смогли. ошибка будет типа ArrayIndexNotFound или типа того.
function removeElement(array, element){
index = array.indexOf(element)
array.splice(index, 1)
return true
}
тоггда пользователь функции сможет сам решать отлавливать ли ему исключения брошанные этой функцией, и обрабоатывать, или же пропускать вверх.
То што там в яваскриптеее, отключатся оптимизаааци при try catch, это уже совсем другая история, мало меня заботящая. я пишу свой язык в котором все будет как надо. и в нем "КАК НАДО" не будет противоречить "КАК УДОБНО" и "КАК БЫСТРО"