回答編集履歴

1

追記

2017/11/06 05:04

投稿

yambejp
yambejp

スコア114843

test CHANGED
@@ -9,3 +9,127 @@
9
9
  もちろん事前にデータをチェックしたとしても、Add側で二重にチェックしてやるほうが
10
10
 
11
11
  より確実だと思います
12
+
13
+
14
+
15
+ # 追記
16
+
17
+
18
+
19
+ 考え方
20
+
21
+ - パターン1
22
+
23
+ ```PHP
24
+
25
+ function Add($x, $y) {
26
+
27
+ $sum = $x + $y;
28
+
29
+ return $sum;
30
+
31
+ }
32
+
33
+ function is_natural(){
34
+
35
+ $args=func_get_args();
36
+
37
+ $ret=true;
38
+
39
+ foreach($args as $num){
40
+
41
+ if(!is_int($num) or $num<=0) $ret=false;
42
+
43
+ }
44
+
45
+ return $ret;
46
+
47
+ }
48
+
49
+ $x=10;$y=20;
50
+
51
+ if(is_natural($x,$y)){
52
+
53
+ print Add($x,$y);
54
+
55
+ }else{
56
+
57
+ print "wrong data!";
58
+
59
+ };
60
+
61
+ $x=-10;$y=20;
62
+
63
+ if(is_natural($x,$y)){
64
+
65
+ print Add($x,$y);
66
+
67
+ }else{
68
+
69
+ print "wrong data";
70
+
71
+ };
72
+
73
+
74
+
75
+ ```
76
+
77
+ ※上記のように、外側でチェックをすればAddから戻るデータはかならず自然数です。
78
+
79
+ 型が保証されるのでわかりやすいでしょう。
80
+
81
+ 逆に例外処理を都度書かなくては行けないのは煩雑です。
82
+
83
+
84
+
85
+ - パターン2
86
+
87
+
88
+
89
+ ```PHP
90
+
91
+ $x=10;$y=20;
92
+
93
+ print Add($x,$y);
94
+
95
+ $x=-10;$y=20;
96
+
97
+ print Add($x,$y);
98
+
99
+ function Add($x, $y) {
100
+
101
+ if(!is_natural($x,$y)) return "wrong data!";
102
+
103
+ $sum = $x + $y;
104
+
105
+ return $sum;
106
+
107
+ }
108
+
109
+ function is_natural(){
110
+
111
+ $args=func_get_args();
112
+
113
+ $ret=true;
114
+
115
+ foreach($args as $num){
116
+
117
+ if(!is_int($num) or $num<=0) $ret=false;
118
+
119
+ }
120
+
121
+ return $ret;
122
+
123
+ }
124
+
125
+ ```
126
+
127
+
128
+
129
+ メインパートは書きやすくなりますが、Addからの戻り値の型が曖昧になります
130
+
131
+
132
+
133
+ errorでthrowしたりすることも視野にいれれば
134
+
135
+ 個人的にはパターン1の方がデータ管理がし易いとおもいます。