Takuya Miyashita
This site
Web
Start:
*goto文の闇 [#p6352de1]
#contents
go to 文は極力使用を避けたいと[[基本方針>../可読性向上・...
***goto 文を使うことの欠点 [#u72b5548]
-条件分岐の整理か難しくなる~
goto (文番号)の文番号の先には,直接式が書かれているか,co...
飛んだ先が遠いと,どのような条件の場合に当該処理が実行さ...
計算フローが追いにくいと,後にインデントで見やすくしよう...
-不要な continue 文を許容し,必要な部分が不明瞭になる~
continue 文は参照される可能性がない場合もコンパイルが通っ...
#codeprettify(lang-fortran){{
do I=1,10
...(goto文のない記述)...
201 continue
202 continue
...(goto文のない記述)...
enddo
}}
コンパイルオプションを付ければ警告くらいは出るかも?~
しかし,何にも使われないダミーの continue 文は,必要だと...
-無限ループにハマる可能性がある~
(当たり前の話ではあるものの)~
先へ進むしかない goto 文ならまだしも,戻る goto 文は条件...
収束計算ではある程度やむを得ないかもしれない.ただし,収...
以上の理由より,goto 文は避けたい.改善例を以下に示す.~
***(1) if, go to~continue (ループの末尾)は cycle で代用 ...
まず,do ループの結語には,enddo と continue の2通りがあ...
enddo を使用した場合にも文番号があって構わないが,不要な...
ある条件(hoge とする)を満たした場合に次のIへジャンプした...
#codeprettify(lang-fortran){{
!!例1
do I=IS,IE
...(何か)....
if(hoge) cycle
....
enddo
!!例2
do 501 I=IS,IE
...(何か)....
if(hoge) goto 501
....
501 continue
}}
人によっては,例2の方が見やすいかも.しかし,continue は ...
***(2)if,go to~continue (ループの末尾以外)は if(not), th...
goto の先が do 文の終端でない場合には,if(hoge) then → en...
#codeprettify(lang-fortran){{
!(修正前)
if(hoge) goto 501
...(処理A)..
501 continue
...(処理B)...
}}
#codeprettify(lang-fortran){{
!(修正後)
if (not(hoge))then
...(処理A)..
endif
...(処理B)...
}}
***(3)文番号を使用する方が見やすい場合もあるけれども… [#q...
なるべくインデントで代用したい.~
文番号は format 文で必須であり,さらに goto 文もとなると...
if の後にインデントをすることが見やすくするための常套手段...
何重もの if 文によってインデントしすぎてしまう場合は,論...
End:
*goto文の闇 [#p6352de1]
#contents
go to 文は極力使用を避けたいと[[基本方針>../可読性向上・...
***goto 文を使うことの欠点 [#u72b5548]
-条件分岐の整理か難しくなる~
goto (文番号)の文番号の先には,直接式が書かれているか,co...
飛んだ先が遠いと,どのような条件の場合に当該処理が実行さ...
計算フローが追いにくいと,後にインデントで見やすくしよう...
-不要な continue 文を許容し,必要な部分が不明瞭になる~
continue 文は参照される可能性がない場合もコンパイルが通っ...
#codeprettify(lang-fortran){{
do I=1,10
...(goto文のない記述)...
201 continue
202 continue
...(goto文のない記述)...
enddo
}}
コンパイルオプションを付ければ警告くらいは出るかも?~
しかし,何にも使われないダミーの continue 文は,必要だと...
-無限ループにハマる可能性がある~
(当たり前の話ではあるものの)~
先へ進むしかない goto 文ならまだしも,戻る goto 文は条件...
収束計算ではある程度やむを得ないかもしれない.ただし,収...
以上の理由より,goto 文は避けたい.改善例を以下に示す.~
***(1) if, go to~continue (ループの末尾)は cycle で代用 ...
まず,do ループの結語には,enddo と continue の2通りがあ...
enddo を使用した場合にも文番号があって構わないが,不要な...
ある条件(hoge とする)を満たした場合に次のIへジャンプした...
#codeprettify(lang-fortran){{
!!例1
do I=IS,IE
...(何か)....
if(hoge) cycle
....
enddo
!!例2
do 501 I=IS,IE
...(何か)....
if(hoge) goto 501
....
501 continue
}}
人によっては,例2の方が見やすいかも.しかし,continue は ...
***(2)if,go to~continue (ループの末尾以外)は if(not), th...
goto の先が do 文の終端でない場合には,if(hoge) then → en...
#codeprettify(lang-fortran){{
!(修正前)
if(hoge) goto 501
...(処理A)..
501 continue
...(処理B)...
}}
#codeprettify(lang-fortran){{
!(修正後)
if (not(hoge))then
...(処理A)..
endif
...(処理B)...
}}
***(3)文番号を使用する方が見やすい場合もあるけれども… [#q...
なるべくインデントで代用したい.~
文番号は format 文で必須であり,さらに goto 文もとなると...
if の後にインデントをすることが見やすくするための常套手段...
何重もの if 文によってインデントしすぎてしまう場合は,論...
Page:
Edit with a page name which already exists