[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[WitchTech 00730] Re: 文字列を数値に変換するには?



うえけんです。

> >> strcpy, strcat は見た目でやっていることが分るので、少なくと
> >> も変なループが書いてあるよりは可読性が高いと思います。
> > 「変なループ」の話は、この件では問題にしていないと思って
> > いたんですけど。それに変なループはループを見直すのが重要
> > なんであって、この問題に限った話ではないですよね。
> 
> ループであろうが、sprintf であろうが、それは strcat よりも確実
> に可読性を落とすと思っています。

単に「変なループ」を引き合いに出すのはおかしいということです。
変なループならループが変なのであって、他の処理がおかしいので
はないでしょう。

> 「文字列の終端に別の文字列を繋ぐ」手法は沢山あるんでしょうけど、
> 最も可読性が良い、つまりコードが目的を明に示しているのは strcat
> だと思っています。

あたながそう考えるのはいいとして、他人に押し付けるようなこと
はしないようにお願いします。私は「使いもしないでよけて通るの
はどうか?」と主張しているだけで、絶対的な優位性など主張して
はいません。事実 strcat も使うし scanf系を使わないようにする
こともあります。

> ・strcat, strcpy は sprintf と比較して可読性が悪い
> ・strcat, strcpy は sprintf と比較して速度が速い
> 
> という両方の点に対して異論がある、というだけです。

について、2点目はすでに訂正しています。

1点目は「連発した場合」に限っています。パッと見でやっている
ことがわかる規模ならどっちを使おうが問題ないです。

strcatを連発して20行かけた処理を、sprintf で1行にできるの
なら、バグの入る確率が1/20になるわけです。バグはソースの
行数に比例して増えるのですから、できるだけ短いほうが、究極的
にはプログラムなど書かないで目的を達成できるのがベストです。

でもそれは無理だから、処理ユニットごとに関数に分割して、注目
する領域を短く区切ることでバグを取りやすくするわけです。少な
くとも20行見渡さないと何をしているか理解できないのと、1行
を良く読めばすむのとで、sprintf が明らかに劣るという主張には
首をかしげざるを得ません。


ML Archives