例えば、0 チェックやタイプチェックをしてあげる? 例えば、0 チェックやタイプチェックをしてあげる? 例えば、0 チェックやタイプチェックをしてあげる? 例えば、0 チェックやタイプチェックをしてあげる? def def div a div a, , b b return return false false if if b b == == 0 0 return return false false unless unless [ [a a, , b b] ]. .all all? ?{ {| |v v| | v v. .is_a is_a? ? Numeric Numeric } } a a / / b b end end div div 10 10, , 0 0 #=> false #=> false div div '10' '10', , 3 3 #=> false #=> false 7 / 22
div a, , b b a a, , b b = = [ [a a, , b b] ]. .map map( (& &method method( (:Float :Float) )) ) a a / / b b rescue rescue false false end end div div '10' '10', , 3 3 #=> 3.3333333333333335 #=> 3.3333333333333335 8 / 22
div a, , b b a a, , b b = = [ [a a, , b b] ]. .map map( (& &method method( (:Float :Float) )) ) ( (a a / / b b) ). .round round( (3 3) ) end end div div 10 10, , 3 3 #=> 3.333 #=> 3.333 9 / 22
div a, , b b a a, , b b = = [ [a a, , b b] ]. .map map( (& &method method( (:Float :Float) )) ) return return false false if if b b == == 0 0 return return false false unless unless [ [a a, , b b] ]. .all all? ?{ {| |v v| | v v. .is_a is_a? ? Numeric Numeric } } ( (a a / / b b) ). .round round( (3 3) ) rescue rescue false false end end 10 / 22
div a, , b b a a / / b b end end def def div a div a, , b b a a, , b b = = [ [a a, , b b] ]. .map map( (& &method method( (:Float :Float) )) ) return return false false if if b b == == 0 0 return return false false unless unless [ [a a, , b b] ]. .all all? ?{ {| |v v| | v v. .is_a is_a? ? Numeric Numeric } } ( (a a / / b b) ). .round round( (3 3) ) rescue rescue false false end end 11 / 22
A {Q} {P} A {Q} {P} A {Q} {P} A {Q} {P} A {Q} 任意の A の実行は、P の状態になったときに始まり、 任意の A の実行は、P の状態になったときに始まり、 任意の A の実行は、P の状態になったときに始まり、 任意の A の実行は、P の状態になったときに始まり、 任意の A の実行は、P の状態になったときに始まり、 任意の A の実行は、P の状態になったときに始まり、 Q の状態になったときに終了する。 Q の状態になったときに終了する。 Q の状態になったときに終了する。 Q の状態になったときに終了する。 Q の状態になったときに終了する。 Q の状態になったときに終了する。 by バートランド・メイヤー さん by バートランド・メイヤー さん by バートランド・メイヤー さん by バートランド・メイヤー さん by バートランド・メイヤー さん by バートランド・メイヤー さん 15 / 22
Eiffel で事前条件と事後条件 class class STACK STACK [ [T T] ] feature feature is_empty is_empty : : BOOLEAN BOOLEAN; ; pop pop : : T T is is require require -- 事前条件 -- 事前条件 non_empty_stack non_empty_stack : : not not is_empty is_empty; ; do do -- 配列から1 個取り出す処理 -- 配列から1 個取り出す処理 ensure ensure -- 事後条件 -- 事後条件 one_less_count one_less_count : : count count = = old old count count - - 1 1 end end --pop --pop end end --STACK --STACK 17 / 22
Contracts Contracts: :: :Core Core include include Contracts Contracts: :: :Builtin Builtin Contract Contract Num Num = => > Num Num def def double double( (x x) ) x x * * 2 2 end end end end puts puts Example Example. .new new. .double double( ("oops" "oops") ) 19 / 22
argument 1 1 of of 1 1: : Expected Expected: : Num Num, , Actual Actual: : "oops" "oops" Value Value guarded guarded in in: : Example Example: :: :double double With With Contract Contract: : Num Num = => > Num Num At At: : ( (pry pry) ): :7 7 20 / 22