質問: とあるOSSで以下のようにHTTPステータスコードを検証していました。 ``` private void checkHttpCode() { if (http.statusLine.Code / 100 != 2) { throw new Exception(http.statusLine.code, http.statusLine.reason); } } ``` このような条件式で検証する理由・メリットがあれば教えていただきたいです。
回答: HTTPによるリクエストが受け取られた場合、200番台のステータスコードが返されます。 良く知られている OKを表す200の他に、201~208と226といったものがあります。 HTTPステータスコード(Wikipedia) D言語では、C言語と同様に 整数を整数で割ると整数になります。 つまり、 200/100 は 2、201/100 も2、(途中は省略) 208/100 も 2、226/100 も2 となる訳です。 そこで、 ``` private void checkHttpCode() { if (http.statusLine.Code != 200 && http.statusLine.Code != 201 && http.statusLine.Code != 202 && http.statusLine.Code != 203 && http.statusLine.Code != 204 && http.statusLine.Code != 205 && http.statusLine.Code != 206 && http.statusLine.Code != 207 && http.statusLine.Code != 208 && http.statusLine.Code != 226) { throw new Exception(http.statusLine.code, http.statusLine.reason); } } ``` という長ったらしいコードが、整数と整数の割り算について知っていると質問のコードのように簡潔に書くことが出来ます。 質問のコードは、上記のコードと比べて、「短くて」「判りやすい」というメリットがあります。 200番台ではないステータスコードが返ってきたという事は、リクエストが受け取られなかった(何らかの不具合が生じた)訳です。 そうした場合に例外処理をする(例外をthrowして、例外処理に移行する)のは、きわめて常識的なコードです。