Fortranは、1950年代に誕生した歴史あるプログラミング言語ですが、現在でも科学技術計算の分野で広く使われています。しかし、古い時代の書き方のままでは、可読性が低く、バグを引き起こしやすいコードになってしまうことがあります。
そこで、本記事では「現代的なFortranのコーディングスタイル」を紹介し、読みやすくバグの少ないコードを書くためのポイントを解説します。
Fortranの基本構造
Fortranの主プログラムは、program ... end program
で囲まれます。
また、Fortranは大文字・小文字を区別しませんが、統一感を持たせるために小文字で記述することを推奨します。
例えば、次のプログラムを見てみましょう。
program ai
! コメント行(! から始まる)
! 暗黙の型宣言を無効化
implicit none
! 変数の宣言
real :: watashi, kareshi, love
! 変数へ値を代入
watashi = 2.5
kareshi = 0.4
! 計算
love = watashi * kareshi
! 結果の出力
print *, love
end program ai
💡 実行結果
1.00000000
🎯 このプログラムのポイント
- program … end program で囲む
- 小文字で統一(
PROGRAM AI
ではなくprogram ai
) - コメント(!)を活用
- implicit none を必ず記述
- 変数の宣言を明確にする
- コードのブロックごとに空行を入れて可読性を高める
暗黙の型宣言を無効にする(implicit none)
Fortranの古い慣習では、変数の型を明示的に宣言しなくても、変数名の先頭のアルファベットで型が決まるルールがありました(例:i, j, k, l, m, n
で始まる変数は整数、それ以外は実数)。
しかし、この暗黙の型指定はバグの原因になります。例えば、次のコードでは間違った結果が出る可能性があります。
(問題のあるコード)
program ai_wrong
watashi = 2.5
kareshi = 0.4
love = watashi * kareshi
print *, love
end program ai_wrong
エラーなく実行できるが、結果は 0
になる可能性がある!
なぜなら、kareshi
は k
で始まるため、暗黙的に整数(integer)として扱われ 0.4
が 0
に丸められてしまうからです。
(正しいコード)
program ai_correct
implicit none
real :: watashi, kareshi, love
watashi = 2.5
kareshi = 0.4
love = watashi * kareshi
print *, love
end program ai_correct
✅ implicit none
を書くことで、すべての変数を明示的に宣言する必要があるため、バグを防げる!
変数の宣言と型の統一
推奨される書き方:
- すべての変数はプログラムの冒頭で宣言する
implicit none
を使う- 適切なデータ型を指定する
::
を使い、統一感のある宣言をする
(例:変数の宣言)
program variable_example
implicit none
integer :: age, count
real :: height, weight
logical :: is_happy
character(len=20) :: name
! 変数の代入
age = 25
height = 175.5
is_happy = .true.
name = "Taro Yamada"
print *, "Age:", age
print *, "Height:", height
print *, "Happy?", is_happy
print *, "Name:", name
end program variable_example
📝 ポイント
integer
、real
、logical
、character
など、適切な型を指定するcharacter(len=20) :: name
のように、文字列の長さを明示的に指定する
インデントとコメントのルール
読みやすいコードを書くために、適切なインデントとコメントを心がけましょう。
(悪い例)
program bad_example
implicit none
integer x
x=10
if (x>5) then
print*,"x is greater than 5"
endif
end program bad_example
❌ 問題点
implicit none
の前に空行がない- インデントがない
if
文のendif
が揃っていない
(良い例)
program good_example
implicit none
integer :: x
x = 10
if (x > 5) then
print *, "x is greater than 5"
end if
end program good_example
✅ 改善点
- 適切なインデント
- 空行を入れて見やすくする
- if 文の
end if
を揃える
出力の書式を統一する
Fortranでは print *
を使うと簡単に出力できますが、書式を指定するとより見やすい表示になります。
(書式なしの例)
print *, "Result:", 3.14159
出力:
Result: 3.14159012
(書式を指定する例)
print '(A, F6.2)', "Result:", 3.14159
出力:
Result: 3.14
✅ F6.2
は「小数点以下2桁の浮動小数点数」を表すフォーマット
まとめ
✅ 推奨されるFortranコーディングスタイル
良いスタイル | 理由 |
---|---|
小文字を使用 | 読みやすく統一感がある |
コメントを適切に記述 | コードの意図を明確にできる |
implicit none を書く | 変数の型を明示し、バグを防ぐ |
インデントを揃える | 可読性が向上する |
変数の型を適切に宣言 | 意図しない型の誤認識を防ぐ |
書式付きの出力を使う | 見やすい結果を表示できる |
Fortranは今でも科学技術計算の分野で活躍する言語です。きれいで読みやすいコードを書く習慣をつけて、効率的なプログラミングを目指しましょう! 🚀
コメント