ループの脱出

・i,j二つのループで関数から真が返ってきたら1→3
・ループ中に一つも真が返ってこなかったら2→3
こんな要求があった場合GOTO使うとこんな感じだと思う

main {
 ループ(i:…) {
  ループ(j:…) {
   条件判定(関数(i,j)=真) {
    1のコード
    GOTO ラベル1
   }
  }
 }
 2のコード
*ラベル1
 3のコード
}

ところで“GOTOは悪”って主張がされることがあります。
となると

main {
 サブルーチンA呼び出し
 3のコード
}
サブルーチンA {
 ループ(i:…) {
  ループ(j:…) {
   条件判定(関数1(i,j)=真) {
    1のコード
    リターン
   }
  }
 }
 2のコード
}

こんな感じでしょうか?
しかしGOTO憎しってだけでサブルーチンA作るのもどうかと思う。
これを綺麗に書けるコンピュータ言語ってどんなのがありますかね?