查文庫>句子> 理解goto語句的替代方式分析

理解goto語句的替代方式分析

理解goto語句的替代方式分析

  曾幾何時,goto是多麼的讓牛人綻放他們高超的精湛技術

  曾幾何時,goto又變成了萬惡之首

  曾幾何時,goto只在教科書中的示例才會出現

  有太多的理由不讓用goto,但有時,我們又想使用goto的功能,怎麼辦?

  用try/catch/finally便可實現同等於goto的功能,來看二個示例:

  複製程式碼 程式碼如下:

  try {

  // operation one

  if (failed) {

  throw Exception;

  }

  // operation two

  if (failed) {

  throw Exception;

  }

  // operation three

  if (failed) {

  throw Exception;

  }

  } catch (Exception e) {

  // do something when cases failed

  }

  和:

  複製程式碼 程式碼如下:

  try {

  // operation one

  if (failed) {

  return;

  }

  // operation two

  if (failed) {

  return;

  }

  // operation three

  if (failed) {

  return;

  }

  } finally {

  // do something when failed

  }

  以上二段都等同於:

  複製程式碼 程式碼如下:

  // operation one

  if (failed) {

  goto when_failed;

  }

  // operation one

  if (failed) {

  goto when_failed;

  }

  // operation one

  if (failed) {

  goto when_failed;

  }

  when_failed:

  // do something when failed

  用異常的方式有些暴力,但確實能正確的幫助實現類似goto的功能;用return和finally雖不是很暴力,但是比較難控制,因為涉及到return語句,它會在finally塊執行後得以執行,所以如果不想退出程式的`話,這個方法還不如用異常來控制。

  另外,break, continue也是比較強大的跳轉語句,特別是break label和continue label,可以跳出一層迴圈或是多層迴圈; 但是要注意一點的是break只能在迴圈語句和switch語句中使用,continue只能在迴圈語句中使用。所以它們的侷限性也很大。

  這個小示例說明,goto不單單是一個語句,它是一種解決問題的思路和程式設計習慣,習慣了它的人,或者是想用它的人,即使不用goto也會寫出類似goto邏輯出來。它的優點是會更容易的幫助找出解決方案。它的缺點也是眾人皆知。但我們要避免的不單單是一個goto語句,而是這種“跳轉式”的解決思路和程式設計習慣。