X



ループを理解できない作業員の為にループを排除した
0001デフォルトの名無しさん
垢版 |
2021/09/28(火) 02:08:21.71ID:y2Bhm/WA
たとえば、九九の2の段を表示したいとする。
手続き型プログラミング言語的な発想でシェルスクリプトを書くと、次のようになる。

for i in 1 2 3 4 5 6 7 8 9; do
echo "2×${i}=$((2 * ${i}))"
done

プログラミングに慣れていない現場の作業員は、繰り返し構文が
でてくると理解が及ばないことがある。

そのため次のように記述することとした

echo "2×1=$((2 * 1))"
echo "2×2=$((2 * 2))"
echo "2×3=$((2 * 3))"
echo "2×4=$((2 * 4))"
echo "2×5=$((2 * 5))"
echo "2×6=$((2 * 6))"
echo "2×7=$((2 * 7))"
echo "2×8=$((2 * 8))"
echo "2×9=$((2 * 9))"

上から下に読めるというメンテナンス性を強く意識している。
0002デフォルトの名無しさん
垢版 |
2021/09/28(火) 02:09:10.01ID:y2Bhm/WA
似たような例を考えてみよう。ファイルa1.txt?a10.txtは削除、
b1.txt?b10.txtは大文字にリネーム、c1.txt?c10.txtは新規作成という処理は、
手続き型プログラミング言語的な発想で記述すれば次のようになる。

for i in 1 2 3 4 5 6 7 8 9 10; do
rm a${i}.txt
mv b${i}.txt B${i}.TXT
touch c${i}.txt
done

これは次のようになる。

rm a1.txt ; mv b1.txt B1.TXT ; touch c1.txt
rm a2.txt ; mv b2.txt B2.TXT ; touch c2.txt
rm a3.txt ; mv b3.txt B3.TXT ; touch c3.txt
rm a4.txt ; mv b4.txt B4.TXT ; touch c4.txt
rm a5.txt ; mv b5.txt B5.TXT ; touch c5.txt
rm a6.txt ; mv b6.txt B6.TXT ; touch c6.txt
rm a7.txt ; mv b7.txt B7.TXT ; touch c7.txt
rm a8.txt ; mv b8.txt B8.TXT ; touch c8.txt
rm a9.txt ; mv b9.txt B9.TXT ; touch c9.txt
rm a10.txt; mv b10.txt B10.TXT; touch c10.txt
0003デフォルトの名無しさん
垢版 |
2021/09/28(火) 02:10:37.61ID:y2Bhm/WA
ただし、すべてのケースでループ展開すればよいというものではない。
展開したスクリプトがテキストエディアの1画面に収まるかどうかを、
ループ展開するかどうかのひとつの判断基準にしている。
1画面に収まらないようなループ展開は、逆に読みにくくなる。

繰り返し構文を使わなければ記述できない場合には、繰り返しの終了判断をループの最後に記述する。
通常、whileは次のように最初に繰り返し終了判定を記述することが多い。

i=1
while [ $i -le 10 ]; do # 10または10よりも小さければループ継続
echo "${i}周目"
i=$(( $i + 1 ))
done

これは次のように終了判定を繰り返し構文の一番最後に書く。

i=1
while [ 1 ]; do
echo "${i}周目"
i=$(( $i + 1 ))
[ $i -gt 10 ] && break; # 10よりも大きければループ終了
done

繰り返しの終了判定はループの先頭に記述されているよりも、
ループの最後に記述されている方が直感的のようだ。
プログラミングに慣れた方は先頭に条件文を書くことになんの疑問も抱かないが、
業務システムを作ることになる現場の担当者は、先頭に条件を書くという書き方にひどく違和感を覚える方が多い。
0006デフォルトの名無しさん
垢版 |
2021/09/28(火) 16:36:19.28ID:nD0g4rLv
Σやで
0007デフォルトの名無しさん
垢版 |
2021/09/28(火) 16:41:08.23ID:MZ6TCgKK
横M字ハゲ?
0011デフォルトの名無しさん
垢版 |
2021/10/04(月) 21:10:46.37ID:/t8Uhu5j
ばーか
0012デフォルトの名無しさん
垢版 |
2021/10/13(水) 22:31:26.27ID:BLGVOBJE
マシニングセンターってループないの?マジ!?
インデックス加工の穴開けとか出来るんじゃ?
0013デフォルトの名無しさん
垢版 |
2022/01/22(土) 11:38:24.29ID:qigFyzKc
>>5で終了している
0014デフォルトの名無しさん
垢版 |
2022/01/23(日) 21:23:40.89ID:AHdYZ2f+
>>1
ループを理解できない上司に
「じゃあ1から100の段まで作れるよね?よろしく!」
と言われたら詰んでしまうw
0017デフォルトの名無しさん
垢版 |
2022/01/30(日) 12:26:43.65ID:5V9R/BtT
九九?
一番上の奴をコピーして下に80回貼り付ける
その後数字を書き換える
これで完成や!
0019デフォルトの名無しさん
垢版 |
2022/02/02(水) 21:51:22.08ID:Xe1+J6sR
int i,j;
for(i=0;i<9;i++){
for(j=0;j<9;j++){
printf("printf(\"%%d*%%d=%%d\\n\", %d, %d, %d);\n", i+1, j+1, (i+1)*(j+1));
}
}
レスを投稿する


ニューススポーツなんでも実況