新しいものを表示
orange さんがブースト

hoge.toString()の toString()は ほとんど を文字列として出力することができるので、副作用がないと判断してます!
(Rust言語だと、 debugを実装してないとエラーになるんだけど、これはコンパイラが事前にチェックするので副作用になれない)

一応、これをわざわざ説明しなくてもいい人が議論してる前提での例示><;

スレッドを表示

(一応><)
例えで出した、動的型付け云々の 1+"hoge" は、リテラルをどういう型に解釈するのか?と、異なる型(あるいは同一の型)同士のある演算子による演算結果をなにで返すかって話であって、それは動的に型を決めるのと静的に型検査するかと言うことには直接は関係ない><

orange さんがブースト

例外は値を返さないというのがありまして、
.toInt()は数字を返す期待をされるのに対して、toInt()で例外が発生すると値を返さなくなるので参照透過性が失われるので副作用があることが認められるのさー

スレッドを表示
orange さんがブースト

単に要求された型の範囲で返せるか返せないかってだけの話であってそれ副作用の有無と全く関係ないよねたぶん?><;

と言うことは、さっき書いた動的型付けの議論の例示の 1+"hoge" の話と全く同じ?><;

hoge.toInt()は、hogeの状態に依存するから副作用があるって主張だよね?>< たぶん><
hoge.toString()もhogeの状態に依存するよね?><;

意味わかった!!!!!!!!><;
なるほど><; 「例外????><;」って考えちゃったからおかしく・・・・あれ?><

orange さんがブースト

例外はく可能性があると副作用って言っちゃったら、引数にゼロがあると(あるいはゼロ以外の何らかの既知の数値があると)ゼロ除算が発生する関数が全部「副作用ある」になっちゃわない?><;

orange さんがブースト

補足!関数にとって、その関数の返すものがその関数によってあらかじめ期待されているものであれば副作用にならない。

何が副作用に当たるのかは、

ja.m.wikipedia.org/wiki/%E5%8F

こちらが詳しいです!

スレッドを表示

例えば
static int DivideAbyB(int a, int b){
return a/b;
}
って副作用あるって言うの?><;

例題?としても、例えば、数値に解釈できなければ0を返すやつとか、nullableでnullだったら"null"では無く例外はくやつとかどうなるんだろ?><; とか、

微妙に違うけど似た議論で、「動的型付けな言語なら 1+"hoge"がエラーにならない!」みたいな間違いにちょっと近い感想と言うかなんと言うか・・・・><

計算機用語の副作用ってそういう意味だったっけ?><

orange さんがブースト

例外吐くのも副作用、なるほど。なんか主作用を完遂しつつ他の作用も発生している、みたいなものだけを想像してしまっていたな。

orange さんがブースト

toInt() toDouble() が String型に生えてた場合、数字型に変換する時に例外を吐くので副作用になる。こうした副作用をいかにメインロジックのコードから分離できるかがソフトウェアの安定性に寄与するんよ..!

感情だしたりとか対立と調和みたいなそういうのの国別の傾向><

古いものを表示
:realtek:

思考の /dev/null