[過去ログ] Rust part16 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
827
(1): 2022/09/26(月)19:31 ID:i/jndsoD(1) AAS
他の言語でもユーティリティを使わずに、DIやモックを自分でやったことがないんだろうな
説明が面倒だ
828: 2022/09/26(月)19:38 ID:V9yeC/LF(2/2) AAS
>>827
テスト以外の開発の話でも
フレームワークに依存してやってる人は
単純なこと含めて本質的なことを理解してない人が多く
フレームワークなしでは何も分からず何も出来なくなってしまう例を時々見かける
829
(2): 2022/09/26(月)21:10 ID:qW/k82Qg(1) AAS
cfg使えば良いじゃないって人は#ifまみれで一見しただけじゃ
何がどう動くんだか判らないCのコードを正当化するつもりなのだろうか
Rustは人間が注意すれば問題ないみたいな考えはレガシーで時代遅れだ
という思想の言語だと思っているんだが違うのかな
830: 2022/09/26(月)21:41 ID:w5YNQb64(1) AAS
>>829
#ifは使わないし
cfg(test)はテスト分離のため必須でしょ
どんな環境でも魔法は無いよ
831
(1): 2022/09/26(月)23:33 ID:h/WE7ZWH(3/3) AAS
>>829
cfg使わないで済むいい方法があるなら書いてよ...
832: 2022/09/27(火)01:17 ID:OwORQ6vn(1/2) AAS
mod tests に cfg(test) は必要だとして
依存性の注入にはtrait使えって事なのでは
833: 2022/09/27(火)07:51 ID:f9SEu4pT(1) AAS
traitで置き換え可能にするのが面倒というのはありそうだな。
834
(1): 2022/09/27(火)08:15 ID:SBVoZTui(1) AAS
AMD64のデフォルトのオペランドサイズは32bitなのにusizeが64bitなのは何でなのかな
835: 2022/09/27(火)11:05 ID:OwORQ6vn(2/2) AAS
size_tが64bitだからでは
836: はちみつ餃子 ◆8X2XSCHEME 2022/09/27(火)12:28 ID:ozjafOA0(1) AAS
>>834
usize はポインタのサイズということになっている。
837: 2022/09/27(火)19:04 ID:ZwmfNOl5(1) AAS
>>831
単体テストで、依存を分離するのは当然のことすぎてみんな説明が億劫になってる
C++だろうがRubyだろうが、モックやスタブを使って、関数同士やクラス同士の依存を切り分けてテストするのは当たり前
そうしないとそもそも単体テストにならないじゃん

わかってる人にしかわからないであろう簡略な説明をすると、テスト用のエントリポイントで、テストに使うモックオブジェクトを指定するだけだよ
そういうことができるようにあらかじめコード設計しておかないといけないがな
考えてなかったならリファクタが必要
838: 2022/09/27(火)19:48 ID:J8MleXan(1) AAS
そんなフワフワした説明されても...
839
(1): 2022/09/27(火)19:51 ID:AWnlNGZp(1) AAS
本物と異なり決まった値を返す送信元スタブと
本物と異なりassertだけする送信先モックを
mod testsの中では本物の代わりにuseするだけだよね
入れ替えちゃうからtrait制約で本物も偽物も受け付け対応とかわざわざする必要ないよね
840: 2022/09/28(水)00:44 ID:JQpGo85s(1/2) AAS
>>839
useしたモックをどうやって注入すんの
関数の引数もstatic変数でも良いけど、テスト対象の実装がモックも本物も選択的に使えるようにするならば、
genericな型を受け付けるような実装にしておかないといけないのでtraitが登場するのでは

それともmod testsの外もcfgで置き換えると言っている?
841: 2022/09/28(水)00:48 ID:JQpGo85s(2/2) AAS
要は
use imp::Foo;
fn target(foo: Foo) {}
がテスト対象だとして
mod tests {
use mock::Foo;
#[test]
fn test() {
target(Foo::new());
}
省3
842
(1): 2022/09/28(水)07:20 ID:1i04Jlqk(1) AAS
traitが無い言語では無理ってこと??
843: 2022/09/28(水)11:35 ID:RLf9Yg7w(1) AAS
>>842
他の言語は他のやり方でやってるだけだろ
844
(1): 2022/09/29(木)01:43 ID:xXycU9Ev(1) AAS
u32 を格納する型が必要になり、また、逆に u32 に変換する必要もあるという状況で
せっかくだから u32 に変換可能な型は受け入れようと考えてこんなコードを書きました。
しかしエラーになります。

struct Code(u32);

impl<T: Into<u32>> From<T> for Code {
fn from(x: T) -> Self {
Code(x.into())
}
}

impl From<Code> for u32 {
省10
845: 2022/09/29(木)02:16 ID:zId7dOnm(1) AAS
無い
846: 2022/09/29(木)02:20 ID:7xp1eqla(1) AAS
そっかー
847: 2022/09/29(木)02:40 ID:U5dWXlr2(1) AAS
そういうのはIntoCodeみたいな感じで別トレイトにすることが多い気がする
外部リンク[html]:docs.rs
848: 2022/09/30(金)02:17 ID:Yj/X+hjS(1) AAS
初歩的なことですまんけどさ
メソッド内で↓みたいなのってよく見るけど、こう言うのってself.asdfのまま使用するのに比べてどういった利点があるの?
let asdf = self.asdf;
849: 2022/09/30(金)10:23 ID:1sTGpNyR(1) AAS
名前を短くする目的が99パー
850: 2022/09/30(金)11:00 ID:tNhbOFxw(1) AAS
クロージャーで構造体のフィールドにアクセスすると構造体ごとムーブしちゃうんでそれ対策じゃないかな
2021で対策されたからどんどん減ってくだろうけど
外部リンク:play.rust-lang.org
851
(3): 2022/09/30(金)12:43 ID:NYKsqXq4(1/2) AAS
書き方は違うけどフィールドそれぞれに対して処理を行う場合に抜け漏れがないことをコンパイラにチェックさせる目的でローカル変数にすることはある

let Foo { foo, bar. baz } = self;
としておくと後続の処理で使わないフィールドがあったときにコンパイラが警告してくれる
構造体に新たにフィールド追加した場合も分割代入の箇所でコンパイルエラーになるので修正必要箇所を洗い出すことができる
852: 2022/09/30(金)13:52 ID:yzoXDHK/(1) AAS
>>851
なんかすごくモヤモヤする
853: 2022/09/30(金)14:15 ID:oHn8O8ll(1) AAS
本人は俺ってスゲー、天才やん!
って思ってるんだろうけど後でコード見たらなんでこんなイミフなことしてるんだ?バカじゃねーの
ってなるパターンかと
まあこういう工夫をすること自体は悪くない
854: 2022/09/30(金)14:42 ID:M1og6e+j(1) AAS
フィールドそれぞれに処理をするシチュエーションがわからない
855: 2022/09/30(金)14:50 ID:temvUu5a(1) AAS
>>851
俺もそのdestructuring assignment自体は使いまくる
しかし目的が漏れチェックとは違うのでこうだな
let Self { foo, bar, .. } = self;
856: 2022/09/30(金)14:55 ID:t/wNXSJY(1) AAS
>>851
これいいな
1-
あと 146 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.053s