良いコードを参考にしましょう②
・上記APIで東京の天気を取得して、翌日の最高気温、最低気温を摂氏で表示する
・日付はコマンドライン引数でも指定できるようにする(指定なしの場合は翌日)
・APIのレスポンスはJSON形式で受け取り、そのJSONと日付指定をもとに最高気温と最低気温を摂氏で返却する処理はサブルーチン化して、そのサブルーチンのテストコードを書く
引数: JSON文字列、日付('2018-04-11'などの文字列)
戻り値: 最高気温と最低気温が入ったハッシュリファレンス / 取得できなければundef
上記課題を解くにあたって、どのような構成でコードを書けば見やすくなるか。
■自分が書いたコードの構成
&get_date_temp($date); # 東京の天気を取得して、翌日の最高気温、最低気温を摂氏で表示するサブルーチンの呼び出し。 sub get_date_temp{ 日付の処理。 my $api_data = &get_api_data; #APIからJSONデータを取得して$api_dataに代入する。 my $temp_ref = &return_temp($api_data, $date); #12時の気温、最高気温、最低気温の情報が入っているハッシュのリファレンスを$temp_refに代入する。 &print_temp($temp_ref, $date); #$temp_refをprintする。 } #get_api_dataの定義。 sub get_api_data{ ... } #return_tempの定義。 sub return_temp{ ... } #print_tempの定義。 sub print_temp{ ... }
■他の人が書いたコードの構成
日付の処理。 my $result = &weather_api; #APIからJSONデータを取得して$resultに代入する。 my $temp_noon = &get_temp_at_noon( $result, $date ); # 12時の気温を取得してprint。 print ... my $temp_maxmin = &get_temp_maxmin( $result, $date ); # 最高気温と最低気温を取得してprint。 print... #weather_apiの定義。 sub weather_api { ... } #get_temp_at_noonの定義。 sub get_temp_at_noon { ... } #get_temp_maxminの定義。 sub get_temp_maxmin { ... }
日付についての処理をサブルーチン外で行っている点、
printするにあたってサブルーチンを使っていない点、
最高気温と最低気温の取得と、12時の気温の取得を行うサブルーチンを分けている点が、
自分のコードと異なる。
個人的には、全体の作業を1つのサブルーチンにまとめてそのサブルーチン内で個々のサブルーチンを呼び出すスタイルの方が好き。
ただ、先輩が書いたコードを見ている限りそのようなスタイルの書き方は見かけないので避けた方がいいのかもしれない。