[過去ログ] スレ立てるまでもない質問はここで 159匹目 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
168(2): デフォルトの名無しさん [sage] 2022/02/24(木) 05:18:58.15 ID:jcAfJg3X(1/2) AAS
新卒2年目のプログラマです
ループ処理を行う場合、基本的にforeachを使っているのですが、カウントが必要な単純なループでforを使った所
先輩からカウント用の変数を用意するかselectメソッド(c#です)を使って全部foreachで統一してと言われました
(コーディング規約にあるわけではないです)
わざわざカウント用の変数を用意するのも、速度的にfor使用時より遅くなるselectメソッドを使用するのもなんだかスッキリしないなあと思っています
他の現場を知らないのですが、これは開発の現場では当たり前の事なのでしょうか?
ちなみに皆さんはどうされていますか?
177: デフォルトの名無しさん [sage] 2022/02/24(木) 12:48:01.07 ID:jcAfJg3X(2/2) AAS
自分の書き方が悪くグチを言っているみたいになってしまいすみません
レスの最後の2行は先輩への対応方法を聞いているわけではなく、カウントが必要な単純なループを皆さんはどの様に対応されますかと言う質問でした
>>172172(1): デフォルトの名無しさん [sage] 2022/02/24(木) 12:04:16.87 ID:82W7j8jp(1/6) AAS
Ruby では、繰り返しにindex や、蓄積変数を付けたものがある。
または、each に付ける事もできる
つまり、書き方が決まっている
ary = [ "a", "b" ]
ary.each_with_index do |element, index|
p "#{ index }:#{ element }"
end
出力
"0:a"
"1:b"
ary = [ "a", "b" ]
# 初期値は1
ary.each.with_index( 1 ) do |element, index|
p "#{ index }:#{ element }"
end
出力
"1:a"
"2:b"
同様に、蓄積変数を付けたものもある。
each_with_object( obj ), with_object( obj )
なるほど、Rubyはそうなんですね!
ありがとうございます!!
>>174174(1): デフォルトの名無しさん [sage] 2022/02/24(木) 12:33:04.26 ID:2qhRGcQ8(1) AAS
>>168
頻出パターンだから拡張メソッドで一般化しておくのがいいと思う
foreachでカウント用の変数を都度用意してたらcontinueとかでバグる可能性もある
forの場合は将来的に要素へのindexアクセスが変な形で拡張されたりリファクタリングの妨げになる可能性がある
(メンテする技術者のレベル次第)
public static IEnumerable<KeyValuePair<int, T>> Enumerate<T>(this IEnumerable<T> collection){
int index=0;
foreach (var item in collection) {
yield return new KeyValuePair<int, T>(index++, item);
}
}
foreach (var (i, v) in foo.Enumerate()){
…
}
↑この拡張メソッドの場合はTがintの場合に(i, v)を(v, i)と勘違いしてバグる可能性はある
拡張メソッド良いですね!
自分なりに保守性を考慮して考えてみたいと思います
めっちゃ参考になりましたありがとうございます!
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.041s