リーダブルコーディング技術スレ

■ このスレッドは過去ログ倉庫に格納されています
2013/10/11(金) 01:06:21.56
リーダブルコードとは

・読みやすさ、理解しやすさを追及したコードのことです
・読みやすいということはメンテナンス性も高いということです。
・理解しやすいコードはコードレビューも楽になります。
・理解しやすいコードはバグも少なくなります。
・短いほうが優れていることが多いですが、必ずしも短いほうがいいとは限りません。

俺ルール
・書き方の勝負であり、言語の勝負をしないでください。
・標準、非標準に限らずライブラリを使いましょう。
・なければ自分で関数を作りましょう。関数はなるべく汎用的に。

こういうコードを読みやすくするにはどうすればいいでしょうか?
というようなことを語るスレ。需要ありますかね?
2014/11/23(日) 12:59:40.43ID:K4bM7kRY
>>246
プリプロの記法はもうちょっとなんとかならないものか?#if/#ifdef/#endif を一行で書ければいいのだが‥
2014/11/23(日) 13:20:52.44ID:hspGDGDv
>>245
本人はわかりやすいつもりで書いてるコードが該当するんじゃね?
省略できるものは全部省略しちゃうとか。
2014/11/23(日) 15:02:18.53ID:E8ar0Vq9
こうだろ
DBGP(var);
2014/11/23(日) 21:25:37.37ID:c84onc2P
>>248
> 本人はわかりやすいつもりで書いてるコードが該当するんじゃね?
> 省略できるものは全部省略しちゃうとか。

だからそれがどんなのかってこと。
例えば、単語を省略して書くのは
わかりにくいとされている。
2014/11/23(日) 21:27:09.08ID:c84onc2P
>>246
それ、明らかにわかりにくいコードだよね。

わかりやすいコードとして考えられたのではなく、
単にやっつけ仕事でifdef DEBUGを入れたのだろう。

一般的な仕組み、例えばsyslog当たりを使えば
分かりやすくなるよね。
2014/11/23(日) 21:27:34.82ID:cV5L5A+9
#ifdef NDEBUG
#define DEBUG_ONLY(x)
#define RELEASE_ONLY(x) x
#else
#define DEBUG_ONLY(x) x
#define RELEASE_ONLY(x)
#endif
253241
垢版 |
2014/11/24(月) 00:06:43.37ID:/hENsJtv
な〜んかID:c84onc2Pの癇に障ったみたいなので一応補足すると、
別に>>220みたいな意見を持つ人全員がバグ量産機だなんて言うつもりはないよ。

ただ、プロとして仕事する以上、コーディング規約に沿ったものでなければ
納品できない開発なんてざらにあるんだよね(有名所だとIEC61508とか)。

釈迦に説法かもしれんが、分かり易いとテストし易いは、似てるようで別物。
技術力が充分でないのに「分かり易ければOK」ていう人は往々にして
テスト漏れ仕込むってことを愚痴りたかっただけ。>>241は完全に個人的な経験からくる偏見だな。ごめんね。
2014/11/24(月) 00:10:37.50ID:LP7Sk3Ho
プロとか言い訳すんなやw

「コーディング規約に沿ったものでなければ 納品できない」
というのが、理由であって

わかりやすくするためではないだろ。

クライアントが望むなら、けばけばしいデザインのサイトだって作るさ。
だがそれは、クライアントの指示でだめなことをしているのであって
それが正しいと思ってはいけない。

今ここに、クソなクライアントはいないんだぜ?
2014/11/24(月) 00:14:44.32ID:/hENsJtv
いや、言い訳じゃなくて、契約の問題ですし。。。常識でしょ?
2014/11/24(月) 00:19:33.68ID:LP7Sk3Ho
スレタイ読んでね。リーダブルコーディング技術スレ。

リーダブルなコードのための話であって、

契約で〜とかいうのが理由ならそれは無関係だろ。
2014/11/24(月) 00:22:07.34ID:3/CdPMI5
プロか否か、常識か否か、
これを早々に持ち出す姿勢w
2014/11/24(月) 00:25:05.80ID:ALHBj7yp
>>249
そう書いてあればまだ読みやすいのにひどいコードだよ全く
あくまでメンテナンス性最悪なコードの例として出したんだけどね

>>253
横からだけど一言多いなんじゃないかな
2014/11/24(月) 00:25:55.45ID:LP7Sk3Ho
プロとか常識とか言い出す奴は
信用してないわw

だってそれ、単なる虎の威を借る狐だもの。
それに、虎ですらないかもしれないしな

俺の信じる、虎さまはこうおっしゃってる。
だから信じなさい。みたいなw

俺が定義するプロはこういうものなんだ。
お前はプロじゃないのか!みたいで
どっかの宗教と同じ。お前は(俺らの)神を信じないのか!
2014/11/24(月) 00:27:15.22ID:LP7Sk3Ho
プロとか常識とかクライアントが決めたこことか無視しようぜ

わかりやすいコードとはなにか?
これだけで考えよう。
2014/11/24(月) 00:27:26.67ID:/hENsJtv
う〜ん、何か余計に癇に障ったみたいだね。
不覚にもスレ違いな話題に誘導されちゃったから、しばらく黙ってるは。

以下↓本来のリーダブルコーディング技術スレ
2014/11/24(月) 00:30:38.62ID:LP7Sk3Ho
まあ、俺は最初から、わかりやすいコードの
話しかしてないんけどねw

○な書き方、△な書き方、どっちがわかりやすい?
の答えに、どちらでもわかりやすい。という答えがあるのは事実

だから複数のコーディング規約が存在するわけで。

書き方を(自分の好きな書き方に)統一すると、気持ちいかも知れないが
わかりやすさの点から見れば、どちらでもいいことが多い。
2014/11/24(月) 00:34:18.09ID:cBWQwcU/
>>262
>>254 >>259
2014/11/24(月) 00:35:36.40ID:LP7Sk3Ho
>>263
全部俺が言ったことだなw
2014/11/24(月) 00:36:13.26ID:LP7Sk3Ho
あ、まとめてくれてありがとよって
いうところかw
2014/11/24(月) 00:50:24.64ID:VgrvAE4c
>>246
エディタの置換コマンドで
一行に置換してしまえばいいんじゃないか?
2014/11/24(月) 00:59:19.90ID:ALHBj7yp
>>266
読むぶんには読めるけど書き換えはさせてもらえない
なのにコード読まないと処理が理解できないというコード

リーダブルと真逆なものを上げることで参考になればいいなと思って
2014/11/24(月) 01:04:11.30ID:LP7Sk3Ho
> 読むぶんには読めるけど書き換えはさせてもらえない
可愛そうだよね。まあ、社内規則だからw

で、ここはリーダブルなのかはどういうことかって話すスレだから
社内規則で変えられないとかはどうでもよくて。

じゃあリーダブルなのはどういうコードかってことで、
意見を集めましょう。

ってもうみんな書いたか? 俺はsyslogって書いた。

デバッグ出力をするために再コンパイルが必要っていうのも
変な話なんだよね。そもそもオプションで指定すればいいと。
デバッグ出力機能を持っている。という所まで仕様。
で、こういう仕様を考える人、そこまで頭が回る人が、いないんだろうね。
2014/11/24(月) 01:05:10.00ID:cBWQwcU/
只のデバッグプリントなら読み飛ばせばいいだけじゃん

リーダブルの真逆てコードの意図が伝わってこないものを言うんじゃない?
2014/11/24(月) 01:06:14.43ID:cBWQwcU/
どうでもいいけど、syslogでデバッグって相当頭悪いか、ぬるい開発だな
2014/11/24(月) 01:10:43.53ID:LP7Sk3Ho
おいおい、syslogでやるのはデバッグプリントであって
デバッグそのものじゃないぞw

syslogにあるだろ。プライオリティdebugのことだよ。

http://www.atmarkit.co.jp/ait/articles/0209/07/news002_2.html
> プライオリティ(priority)
>
> priorityは、プログラムが出力するメッセージのうち、ログのレベルの重要度を設定します。
>
> priority 内容
> debug デバッグ情報
> info 情報
> notice 通知
> warn 警告
> err 一般的なエラー
> crit 致命的なエラー
> alert 緊急に対処すべきエラー
> emerg システムが落ちるような状態
> 下になるほど重要度が高い

なんでこんな基礎的を説明せにゃならんのだw
2014/11/24(月) 01:11:55.52ID:LP7Sk3Ho
既に世の中にあるものを使わずに(知らずに)
少ない知識でもやれるぜって考えで
オレオレで実装するのも、リーダブルにならない原因の一つだよね。
273デフォルトの名無しさん
垢版 |
2014/11/24(月) 06:48:20.80ID:owm7UG/9
なぜ、人はアンリーダブルを求めるのでしょうか?
人は生きて、死ぬだけの存在でありながら、
存在するということに意味を持たせ、生と死をより複雑なものにしようとしました。

本来、人は無駄を好む存在です。
オートメーション、自動化、リーダブルなどというものは、
将来、オートメーションにより追いやられた人々により破壊されることが目に見えているのですから、
破壊されるために効率化を豪語し、効率化に勤しむ人々がいることに、
私は含み笑いを抑えることができません。
2014/11/24(月) 07:00:20.21ID:yM+Y0wwR
リーダプルは、時間的にどの程度のスパンで考えるのかな?
2014/11/24(月) 07:09:48.66ID:g28cqnpj
読みやすさは主観であり、人により異なる。
全員に対して読みやすさを一定量担保するために、コーディング規約を作る。

デバッグプリント関係は、『CODE COMPLETE』 第八章防御的プログラミングがお勧め。
2014/11/24(月) 07:30:10.66ID:NWUcXEp0
> 読みやすさは主観であり、人により異なる。

つまり、人によっては、Aという書き方が読みやすく、
別の人は、Bと言う書き方、Cと言う書き方が一番読みやすいということ

> 全員に対して読みやすさを一定量担保するために、コーディング規約を作る。

たとえば規約でBという書き方に統一する。
さて、統一することによって、Aという書き方は読みにくということになるのか?
Bという書き方は読みにくいということになるのか?


もちろん違う。なぜなら、
> 読みやすさは主観であり、人により異なる。
と書いてあるように、人によって、AやCが読みやすいということに変わりはないからだ。

つまりなりが良いたいかというと、
AでもBでもCでも読みやすいことには変わりないということ。

統一するのは、読みにくい書き方を無くすのが目的であり、
読みやすい書き方は複数あるということは真実だし、
読みやすい書き方ならどれでもいいことにかわりはないのである。

だからこそAとCは自分のに取っては一番ではないが
それでも読みやすいならばどれでもいいから、その規約に従うのである。
277デフォルトの名無しさん
垢版 |
2014/11/24(月) 07:35:54.08ID:tFEPR/wR
>>220
>× 書き方を統一しようとする
>○ わかりやすいように書く

世間に受け入れられているコーディング規約に従うのが一番わかりやすいんだから
それ対立軸じゃなくて両方○になるか両方×になるかだろ
2014/11/24(月) 07:42:27.18ID:NWUcXEp0
> 世間に受け入れられているコーディング規約

が複数あることを忘れてない?

わかりやすい書き方は一つじゃないんだよ。
2014/11/24(月) 07:55:36.62ID:tFEPR/wR
>が複数あることを忘れてない?

忘れてない

>わかりやすい書き方は一つじゃないんだよ。

もちろん

で?
2014/11/24(月) 07:55:49.98ID:cBWQwcU/
>>271
当たり前なことをわざわざ引用付きで語んなよw
お前がぬるい開発しかしてないことはよく分かったから
2014/11/24(月) 08:01:29.70ID:NWUcXEp0
>>280
お前、「お前は語るな」と「俺はそう思ってる」の
2つのことしか言ってないぞ。

何か言い返せよw
2014/11/24(月) 08:03:05.74ID:NWUcXEp0
>>279
で?と言われてもな。

最初から言っているように、

わかりやすいコードを書くことが目的であって
書き方を統一することは目的じゃないんだよって話
言い換えると、わかりやすければ統一する理由はない。

本当の目的を忘れるなって話。
2014/11/24(月) 08:06:01.78ID:tFEPR/wR
>言い換えると、わかりやすければ統一する理由はない。

いや、AとBの両方わかりやすくても、一つの製品にAとBが混在してたら駄目だろ
2014/11/24(月) 08:28:02.98ID:tFEPR/wR
デバッグ出力でsyslogって発想は無いなぁ

最初に批判されてるが
#ifdef DEBUG
は普通のイディオムだから小さなプログラムなら悪くはないし
もう少し大きな規模になってロギングフレームワークを検討しようというなら
もっと抽象度の高いレベルでちゃんとしたフレームワークを採用するだろ
(C++ならglogとか。言語ごとにあるだろ)
285デフォルトの名無しさん
垢版 |
2014/11/24(月) 08:38:23.76ID:owm7UG/9
>>282
君のコードは分かりにくい。はい。論破。

だから、ルールを決めるんだよ。お分かり?
2014/11/24(月) 09:04:52.85ID:NWUcXEp0
>>283
> いや、AとBの両方わかりやすくても、一つの製品にAとBが混在してたら駄目だろ
なんで? それで問題が起きたことなんて無いよ。

どうせコーディング規約なんて誰かが我慢すれば済むようなもんでしょ?
一つに統一することで、他の人が我慢するという横暴(笑)が成り立つんだから。
全員が我慢するか、一部の人だけ除いて我慢するかの違い。

>>285
なんで、世の中で普及してあるコーディング規約の
一つを使ってるのにわかりにくいんだよw
馬鹿じゃないのか?
2014/11/24(月) 09:05:43.57ID:NWUcXEp0
>>284
> デバッグ出力でsyslogって発想は無いなぁ
無いなぁと言われてもね。

ほとんどの有名どころのオープンソースはsyslog
でデバッグ出力している。
それが事実じゃね?
2014/11/24(月) 09:13:38.29ID:tFEPR/wR
>なんで? それで問題が起きたことなんて無いよ。

すまんが、2ch で匿名でここから議論する気はないので退散。論破と思うならそれで構わん。
教育しても俺に見返りないし。
2014/11/24(月) 09:16:25.55ID:NWUcXEp0
はい、論破と思いますよ?
別にわざわざいなくてもいいのに。
2014/11/24(月) 09:24:55.73ID:tFEPR/wR
このページの「デバッグライト」とか
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.6.3.html

ここでは、DebugPrintというマクロを用意しているわけだが、一度これを用意したら全員がDebugPrintを使わなきゃ意味ない
DebugPrintを使ってるコードと#ifdef DEBUGを生で使っているコードが両方存在するのは最悪で。

DebugPrintを用意することで、その定義を変えればデバッグ先をsyslogにしたりできるだろ
ところが、生で#ifdef DEBUGされてるコードが残ってたらそこで変更漏れのバグになる
DebugPrintなど無くて全員生で書いていれば、変更時には漏れがないように注意するからまだマシ
DebugPrintを用意したのに使ってないというのは本当に最悪

これがまず、統一するってことな。
2014/11/24(月) 09:27:04.25ID:tFEPR/wR
もう一つは、
そもそもこういうDebugPrintみたいなのは車輪の再発明なので
今時こんな「オレオレフレームワーク」を作るのは間抜け
(元ページはCopyright 1996)
あるものを使うのが普通
2014/11/24(月) 09:44:09.94ID:J2WKp7i1
>>286
同じものは同じように見えるようにしておかないと、コードレビューしづらい。
コードに手をいれるときにいちいちスタイルどうするか迷うのも無駄。

・・・コードレビューしないなら問題は起こらない。
まわりと明らかにスタイルの違うコードを混入させて気にしないなら問題は起こらない。
つまりそういうことなんだろうと思ってる。
2014/11/24(月) 10:02:33.90ID:NWUcXEp0
>>291
> あるものを使うのが普通

だからsyslogだろ?

もしかして、syslog(ライブラリ)を使っていれば
標準出力や任意のファイルに出力できるって知らない?
2014/11/24(月) 10:06:55.47ID:XbvFM8cR
>>287
> ほとんどの有名どころのオープンソースはsyslog
> でデバッグ出力している。

サーバーソフトだけじゃね?
クライアントソフトの例を 10個ぐらいあげてみて
2014/11/24(月) 10:28:26.69ID:g28cqnpj
ログは異常管理にdebugレベルを含めて使うけど、
開発時のデバッグには使わないかな。
2014/11/24(月) 10:41:04.30ID:tFEPR/wR
>>294
サーバプログラムだってsyslog決め打ちなんて少ないと思うが。ログ出力先の選択肢の一つとしてsyslogがあるだけだろ。

Apache httpd (http://httpd.apache.org/docs/current/logs.html)
エラーログは普通はファイルに書かれます (通常 Unix システムでは error_log、Windows と OS/2 では error.log)。 Unix システムではエラーを syslog や パイプでプログラムに送る ことができます。

Postgresql (https://www.postgresql.jp/document/9.3/html/runtime-config-logging.html)
PostgreSQLは、stderr、csvlogおよびsyslogを含めて、サーバメッセージのログ取得に対し数種類の方法を提供します。

Tomcat (http://tomcat.apache.org/tomcat-6.0-doc/logging.html)
Logging in Apache Tomcat is implemented with the help of Apache Commons Logging library.

有名どころのオープンソースでログ機能がsyslog決め打ちって何かあるの?
2014/11/24(月) 10:57:11.56ID:tFEPR/wR
>>295
「デバッガを使え」みたいな方法論と、デバッグ出力をどうするかは別だと思うが、そういうこと?どうしてる?
2014/11/24(月) 11:23:35.39ID:g28cqnpj
>>297
システム運用中に異常処理を行った場合、管理者にその旨を通報する用途でログを使う。
あくまで、システムの一部なので、リリース後でも取り除かれない。

開発時にだけ有効で、リリース時に無効にする用途には使わないかなって話。
2014/11/24(月) 11:56:52.74ID:NWUcXEp0
開発時のみで使うものだったら
ifdefで残したりしねーよ?

そういう残してあるコードが
じゃまだってのが、話の始まりだろ?
2014/11/24(月) 12:01:55.48ID:tFEPR/wR
>>298
ああ、理解した
デバッグエイドとログを完全に別の概念として使い分けるということか
プリプロセッサ命令のある言語だと確かにそれがスマートだな、なるほど
2014/11/24(月) 12:05:06.98ID:/Xnwup+Z
>>299
> 開発時のみで使うものだったら
> ifdefで残したりしねーよ?

え゛?
2014/11/24(月) 12:55:47.70ID:NWUcXEp0
ifdefでソースコードに書いて
それをずっと保守し続けてるってことは
残す理由があるからそうしてる。
ここまでOK?

その残されたコードがじゃまで
リーダブルにならくなって困っている。
ここまではOK?

ならばifdefなんか使わずに
もっとわかりやすいコードにしろって話。
2014/11/24(月) 15:12:20.28ID:DZ0ISr8h
お前はいい加減周りのことも考えて行動や発言できるようになれよ
コーディングはそれから
2014/11/24(月) 17:13:58.44ID:+VpmsKoD
>>302
で、具体的な提案もなく、文句言うだけ?
2014/11/24(月) 17:49:29.24ID:SQsB+YJ2
プリプロの改良だね‥
2014/11/24(月) 18:31:46.57ID:CiPNuJ6e
で、そこに#ifdefの方がわかりやすい派が現れるんですねわかります
2014/11/24(月) 18:39:55.49ID:cxOxEmtO
#ifdefをインデントするのってアリ?
2014/11/24(月) 19:32:19.00ID:xxtEEteG
中身はインデントするかも
2014/11/24(月) 19:42:14.05ID:UXHgSloT
ソースとプリプロセッサのインデントが混じって見辛くなるから、俺はしない
2014/11/24(月) 20:41:48.81ID:U0wuvsWn
半角スペースでインデントはよく見かける
2014/11/24(月) 22:10:52.63ID:DZ0ISr8h
プリプロセッサのみの部分(define値の切り替えとかerrorとか)だったらインデントしたほうが見やすいと思いインデントしてる
ソース内にかかる部分だと309と同じ意見でしてない

基本は#ifがネストしないようにしたいと思ってるけどね
2014/11/24(月) 22:23:12.31ID:TsbXFfYg
プリプロ行はスペースで、コード行はタブでインデントしてる。
見やすくはなるけど、読みやすさに繋がるかどうかはわからない。
2014/11/24(月) 22:28:30.02ID:EZS/NtvV
#if XXX
 aaa
 bbb
#endif

よりも

#if XXX
void func() {
 aaa
 bbb
}
#else
void func() {}
#endif

func()
ってやっちゃうなあ。これならfunc呼び出し部分についてのインデントに悩まなくてもすむじゃん?
しかも条件XXXで切り替わる部分が複数に成った場合でも、定義を一カ所にまとめておける。
2014/11/24(月) 22:34:36.62ID:o0oR/6A6
目から瓢箪が独楽です
2014/11/24(月) 22:38:27.07ID:TsbXFfYg
関数呼び出しじゃなくてマクロにした方が良くない?
リーダブルの観点ではないけれど、関数呼び出しのネストが深くなるのは良くないと思うんだ。
2014/11/24(月) 22:39:45.84ID:/Xnwup+Z
>>313
func の内容が数行ならいいけど、もっと増えると同じ内容を両方に書かないといけなくなる
func の型とか引数が変更された時に片方の変更を忘れる

とかあるので、俺はやらない
2014/11/25(火) 01:15:46.45ID:45kyml8T
>>316
> func の内容が数行ならいいけど、もっと増えると同じ内容を両方に書かないといけなくなる
> func の型とか引数が変更された時に片方の変更を忘れる

だからこそ>>313のように書くんでしょ?

これなら変更が一箇所にまとまる。

もしこれを、funcを使う場所ごとにに
ifで加工としたら、funcを100箇所使っていたら、
100箇所、同じ変更を繰り返さないといけないよね?
2014/11/25(火) 02:33:45.34ID:GW/pgxiU
目から箪笥です
2014/11/25(火) 03:16:47.66ID:45kyml8T
私も目から箪笥です
2014/11/25(火) 03:53:07.08ID:relupevl
同じじゃない部分だけ分ければいいだけじゃん
2014/11/25(火) 06:54:59.12ID:eaby6zdh
>>317
ああ、すまん、勘違いしてたわ
変更部分を別関数に切り出すと言うことか
>  aaa
>  bbb
が元々関数に切り出すような意味のある単位ならわかるけど、処理の途中の一部を切り出したような場合だと関数名も付け辛いし分かりにくくなる
あと、単に aaa, bbb って書いてるから違和感ないけど、実際には aaa, bbb で必要とする情報や、逆に変更した情報等のやり取りを引数でやる必要もあるので、結構面倒に思うんだけど
2014/11/25(火) 07:46:51.85ID:53f+YSIW
確かOpenSSLも各プラットフォーム毎に
#ifdefの嵐でで手が付けられなくなったらしいけど、
こういうのはTemplate Methodパターンみたいなものを使えばいいんだよ。

デバッグ用の関数、またはクラスと
リリース用の関数、またはクラスを作って
それを使うコードはどちらを使っているか意識する必要がないようにする

これぐらい基本だと思うんだが、OpenSSLを見る限り
世の中のレベルってこの程度のものなのかもしれんな。
2014/11/29(土) 12:47:04.96ID:u8/hKXWz
>>322
こう?関数fにdebug用とrelease用をラップさせんの?

f_debug() { }
f_release() { }
f() { f_debug(); }
2014/11/29(土) 14:50:29.22ID:quQRjBUx
デバッグ用出力の話なら
>>249 で十分テンプレートメソッドパターンと言えるでしょ
2014/11/30(日) 21:01:48.36ID:4o6Sx4rW
呼び出し元のスコープを維持したいからマクロを使うんであって、関数やクラスに分けられるものをマクロで書く奴はいないだろ
2014/11/30(日) 22:41:03.33ID:8xQ5/Fxy
『レガシーコード改善ガイド』を読むと、どこにテスト用のフックを
仕掛けるかみたいな話が出てくるからお勧めしとく。
2014/12/12(金) 00:27:58.93ID:bKiv2VYA
c言語でなるべくグローバル変数を使わない方がいいという事で
グローバル変数無しで書き直したら、関数の引数がやたら多くなってしまった。
(´・ω・`)
2014/12/12(金) 00:31:23.89ID:+hKqCGtl
こぞーよ、こーぞーたいつかいやがれ
2014/12/12(金) 00:40:38.34ID:ADDM5Suo
データ結合まで分離できたって事だろ
誇ってよし
2014/12/12(金) 07:43:19.28ID:Znidw3Lc
なるべくグローバル変数を使わない でいいんだが、
組み込み系だと、場合によって使っていいかと。

組み込みは仮想メモリが無く、搭載メモリ容量も決まっていて、
各機能それぞれ、どれだけの最大サイズでメモリを使うかなんて
設計段階で確定するものだから、
その最大サイズで最初からグローバルにメモリマップを切っておくべきかと。
動的確保とかだと開放漏れなんていう不具合がありがちだし。

普通にローカル変数ですむようなことまでグローバルにするのは厳禁だけど。
2014/12/12(金) 08:57:20.70ID:bKiv2VYA
勉強になるわあ(´・ω・`)
2014/12/12(金) 09:27:52.69ID:E/liDhvH
メモリなどの制約があるからやるのであって、
それをするのが常識な業界であっても
その目的は「リーダブル」ではないことに注意ね。
2014/12/12(金) 15:16:05.63ID:tymqzhoh
>>330
グローバル(スコープの話)と動的確保(メモリー領域の話)をごっちゃにするなよ...
2014/12/12(金) 18:32:11.35ID:qq9LAV1Z
言語の話としては、スコープ(可視範囲)とエクステント(生存期間・寿命)な。
スタックに確保するかヒープに確保するかは、それらの実装の話。
335330
垢版 |
2014/12/12(金) 22:14:49.55ID:Znidw3Lc
いやあ、結構可読性が変わってくるよ。
動的確保系の処理って、寿命管理にそれなりの設計というかコードを書く必要があるし、
未確保の場合の条件分け処理だとか。
グローバルにすればそういう系のコードが排除出来てすっきりするんで。

今、組み込みで動的確保バリバリのプロジェクトに関わってて。
本来大丈夫なはずの所まで、大量の未確保時の例外処理を入れまくって、
可読性?なにそれ?なソースを相手にしているところww
2014/12/12(金) 23:24:59.05ID:OvrU0/Qj
>>335
> グローバルにすればそういう系のコードが排除出来てすっきりするんで。

ごめん、マジで言ってることがわからん
2014/12/12(金) 23:30:21.77ID:JABIbbJk
>>336
C言語の問題になるが、例外というものがなく
エラーは戻り値で返ってくるので、
ちゃんとしたコードを書こうと思ったら原則的に
このように書かないといけない。

int ret;
ret = printf('Hello');
if (ret < 0) {
 return ret;
}

ret = printf('World');
if (ret < 0) {
 return ret;
}
2014/12/12(金) 23:32:27.88ID:SFp8/UEn
トンチンカンすぎんべ…
2014/12/12(金) 23:35:05.15ID:OvrU0/Qj
>>337
だからグローバル使えばどうすっきりするのかと
2014/12/12(金) 23:35:23.81ID:Znidw3Lc
ポインタのヌルチェックとかな
2014/12/12(金) 23:43:14.66ID:Znidw3Lc
オブジェクト指向系言語だったらヌルオブジェクト使ってヌルチェックを不要に出来るし、
どのタイミングで動的確保されるかとかはクラスで隠蔽出来るんだが
2014/12/12(金) 23:44:06.16ID:OvrU0/Qj
コードで示してくれない?
グローバルでもチェックが不要になる訳じゃないよね?
2014/12/12(金) 23:46:39.06ID:Znidw3Lc

ポインタをグローバルに持つとかじゃないよ?念のため。
普通に、ごく普通にプリミティブ型やら構造体変数をグローバルに持つだけなんだが。
2014/12/12(金) 23:53:59.93ID:Znidw3Lc
イメージ的には、様々な動的確保情報を全て確保した状態のヒープを、
最初から固定でグローバルに持っておく、という感じ。で伝わるかな。。
2014/12/12(金) 23:54:55.17ID:ADDM5Suo
(やべえ何度読み直しても分からねえ…何が分からないのかさえ分からねえ…)
2014/12/12(金) 23:56:53.96ID:9Ma9oPly
>>339
> だからグローバル使えばどうすっきりするのかと

グローバルを使えば、メモリ確保が失敗することはない。
つまり、すべてのメモリ確保エラーを
書かないで済む。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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