

とあるOSSで以下のようにHTTPステータスコードを検証していました。

[code]

    private void checkHttpCode() {
      if (http.statusLine.Code / 100 != 2) {
        throw new Exception(http.statusLine.code, http.statusLine.reason);
      }
    }
    
[/code]

このような条件式で検証する理由・メリットがあれば教えていただきたいです。


CC BY-SA 3.0
2016-08-24T06:15:03.193
28463
2016-09-02T09:44:23.267
2016-09-02T05:07:24.937
3054
18578
question
http d
HTTPステータスコードを100で割って2と比較する意味


HTTPによるリクエストが受け取られた場合、200番台のステータスコードが返されます。  
良く知られている OKを表す200の他に、201～208と226といったものがあります。

[HTTPステータスコード(Wikipedia)](https://ja.wikipedia.org/wiki/HTTP%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89)

D言語では、C言語と同様に 整数を整数で割ると整数になります。  
つまり、 200/100 は 2、201/100 も2、(途中は省略) 208/100 も 2、226/100 も2 となる訳です。

そこで、

[code]

    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);
      }
    }
    
[/code]

という長ったらしいコードが、整数と整数の割り算について知っていると質問のコードのように簡潔に書くことが出来ます。

質問のコードは、上記のコードと比べて、「短くて」「判りやすい」というメリットがあります。

200番台ではないステータスコードが返ってきたという事は、リクエストが受け取られなかった（何らかの不具合が生じた）訳です。  
そうした場合に例外処理をする(例外をthrowして、例外処理に移行する）のは、きわめて常識的なコードです。


CC BY-SA 3.0
2016-09-02T09:44:23.267
28651
2016-09-02T09:44:23.267
217
28463
answer