[過去ログ] スレ立てるまでもない質問はここで 159匹目 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
174
(1): デフォルトの名無しさん [sage] 2022/02/24(木) 12:33:04.26 ID:2qhRGcQ8(1) AAS
>>168
168(2): デフォルトの名無しさん [sage] 2022/02/24(木) 05:18:58.15 ID:jcAfJg3X(1/2) AAS
新卒2年目のプログラマです

ループ処理を行う場合、基本的にforeachを使っているのですが、カウントが必要な単純なループでforを使った所
先輩からカウント用の変数を用意するかselectメソッド(c#です)を使って全部foreachで統一してと言われました
(コーディング規約にあるわけではないです)

わざわざカウント用の変数を用意するのも、速度的にfor使用時より遅くなるselectメソッドを使用するのもなんだかスッキリしないなあと思っています

他の現場を知らないのですが、これは開発の現場では当たり前の事なのでしょうか?
ちなみに皆さんはどうされていますか?
頻出パターンだから拡張メソッドで一般化しておくのがいいと思う
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)と勘違いしてバグる可能性はある
177: デフォルトの名無しさん [sage] 2022/02/24(木) 12:48:01.07 ID:jcAfJg3X(2/2) AAS
自分の書き方が悪くグチを言っているみたいになってしまいすみません

レスの最後の2行は先輩への対応方法を聞いているわけではなく、カウントが必要な単純なループを皆さんはどの様に対応されますかと言う質問でした

>>172
172(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はそうなんですね!
ありがとうございます!!

>>174
拡張メソッド良いですね!
自分なりに保守性を考慮して考えてみたいと思います
めっちゃ参考になりましたありがとうございます!
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 2.319s*