
はてなキーワード:インクルードとは
ChatGPTに聞いたらええんちゃうか
いい質問ですね!
これ、実は「どっちが正しい」みたいな決着はなくて、言語文化や時代背景によって意見が分かれる話題なんです。
---
1. for(;;) vs while(1) vs while(true)
* `for(初期化; 条件;更新)` のすべてを省略すると無条件ループになる。
* 昔は「最適化や挙動が明確」という理由で好まれることもあった。
* ただし「1って何?ブール値?」と初学者には直感的でないかも。
*C++やJava、C#などブール型が明確な言語では「一番可読性が高い」。
* 「ずっと真の間繰り返す」という自然な書き方なので、最近はこちらが推奨されることが多い。
* Cではtrueを使うには stdbool.h をインクルードする必要があるので、昔は避けられがちだった。
---
2. 「for(;;)派」の人は誰?
ネットでよく言われるのは、Linuxカーネルのコード規約とか古いUNIX文化の影響です。
* 「無限ループは for(;;) を使う」とカーネル開発のスタイルガイドで書かれている。
*理由は「歴史的にCで最も標準的で、誰もが見慣れているから」。
要するに「C文化圏ではfor(;;)が王道」というだけで、現代の教育やC++/Javaなどの文脈では while(true) の方が読みやすい、という感じです。
---
3. まとめると
なので、初学者が「while(true)の方が可読性高い」と思うのは大正解です 👍
---
👉質問:
エンジニアがやめてしまうと多数のユーザーが使っているアプリケーションでもメンテナンス困難な事態に陥りやすいです。
そんなわけで、staticでいいところはstaticでいいんじゃないですかねえ。
古い時代の言語からインクルード・ファイルという手法が用いられてきた。
これは元ファイルに記述しておいて、そのファイルをインクルードすれば、ゼロからコードを記述せずに済むという手法です。
同じ元ファイルを使っているプログラムは、そのファイルの記述を継承することができますよね。
継承について「動物」と「犬」「猫」のようなたとえ話をすることもよく聞きます。
でもそれは哲学的というか万物創生の宗教的な話にであり飛躍しすぎの感があります。
ショッピングサイトの構築をしてもリアルの店舗の販売者、購入者の行動を分析してみてドキュメントにまとめて客に説明しても、この工数を客に請求するのはかなり無理があると思います。
サイトならば画面上でどのように表示して、どのボタンをクリックすれば購入などのアクションが起こるか、それが客が知りたいことなのです。
ITというものはあくまでも現実の技術レベルでユーザーに受け入れらるように表現することを目的とするもので、自分が神様となって万物を創造するものではない、ということです。
ただ趣味やSFとしてIT書籍を読むならば後者つまり自分が万物創生の神になる幻想に浸るほうがウケるでしょう。
WEBアプリケーションはページ毎がプログラム単位であって、ページ間連携はポストやセッション変数によって行われる。
オブジェクト指向言語では、クラスによって意図的にプログラム分割して開発の利便性を上げる必要があるが、WEBアプリケーションにおいては自然に分割して開発作業が行われる。
オブジェクト指向のメリットとしてはクラス分割により大規模化を抑制する機能があるが、WEBアプリケーション開発については、そのようなクラス分割は込み入ったモジュールでのみ行えばよい。
オブジェクト指向が当時なんでウケたのがという原因が、継承、カプセル化、プロパティ、メソッド、ポリモーフィズムなどの言葉がかっこいいし、それをアフィリエイトブロガーがネットで言葉巧みに宣伝し書籍も売れた。
ポリモーフィズムはかつては、多態とか多相とか呼ばれてましたが、マジな話、Perfumeのポリリズムがヒットしたから似た言葉としてポリモーフィズムが用語として知られるようになったと思う。
カーラジオで埼玉のFM局を聞いていた時にデヴュー当時のPerfumeが出演していて、あの曲聞きました。今となっては昔の話ですよね。
カンジはハイコンテクストなエクスプレッションをエネーブルする一方で、リーディングやライトニングのラーニングプロセスにおいてシグニフィカントなコグニティブローディングをクリエイトします。
さらに、モダンジャパニーズでは、カタカナベースのボキャブラリーやコンセプトがグローイングしており、カンジではエクスプレスできないニュアンスやグローバルスタンダードなアイデアをインクルードするファンクションをアサインされています。
このミックスドスクリプトスタイルは、コミュニケーションをエンリッチするポテンシャリティをホールドする一方で、ユーザーにとってオーバーヘッドをアドするポシビリティもエグジストします。
したがって、カンジオンリーでシンプルなコミュニケーションがアチーブできるというアサンプションは、モダンジャパニーズのダイナミクスをフルコンシダーしていないとステイトできます。
今の日本って誇張なしにこんな感じじゃね?
現役ペチパーだけど、元々PHPはHTMLにスクリプトを埋め込むところから始まった変態言語なので、
普通に関数を作って組み合わせてしまえば大半は事足りるのも当然なんだけども。
実務で使うと便利だなと思うのは、まとまりのある複数の変数とメソッドを1つのクラスにカプセル化できること。
例えば、ユーザの情報を管理するときに、「ユーザ情報」というクラスを作って、
その中に publicな変数として、名前、フリガナ、郵便番号、住所、電話番号、会員ID、階級、職業、性別…
を放り込んでおく。
同時に、ユーザ情報の処理に関連する処理の関数を public なメソッドとして、定義する。
ユーザ情報をタブ区切りで得るメソッド getTABDATA()
フォーム入力からユーザ情報にセットする setFromForm()
こうしておけば、
・ユーザ情報を何かの関数に渡す時は、インスタンスの変数1つ渡せば済む。
・ユーザ情報に関する処理は、ユーザ情報クラスの定義部を観れば済む。
という2大メリットが得られる。
メソッドだって1つのファイルに関数並べてインクルードすれば同じメリットが得られるやん?
…と私も思ってた。ただねぇ、開発規模が大きくなると、関数名の重複を避けた命名が面倒になったり、
連想配列だと好きな場所で勝手に変数増やされたりして、メンテナンス性が悪くなるのね。
あとは、例えばメールを送るという1つの大きな処理に関連して複数の関数を定義する場合に、
その関数をまとめてメール送信クラスとしてしまうのはあるかな。
http://web-terminal.blogspot.jp/2014/04/php-file-mail-pear.html
PHPでエクセル出力できるPHPExcelもクラスになっているから使いやすそう。
http://qiita.com/suin/items/7a8d0979b7675d6fd05b
http://cmf.ohtanz.com/blog/archives/2463
結論としては、
gccの構文解析の結果(構文木)を、XMLとして出力してくれるツールです。C++の構文解析はやたらと面倒らしいので、こういうのがあるとうれしいみたいよ。
「Py++」というC++のPytyonバインディングで使われていたので、必要になりました。gcc-xml 0.6はバイナリで配布されてるんだけど、MSVC7.1までしか対応してないようで、Visual Studio 2005だと使えませんでした。うーん、困った。というわけで、最新版のソース一式を取得してビルドしてみます。
gcc-xmlのビルドには、CMakeというツールが必要になります。CMakeは、オープンソースでクロスプラットフォームのビルドシステムなんだとか。CMakeの公式サイトから、Windows版のインストーラーをダウンロードしてインストールしよう。
実は最初は、ここでcygwinのsetup.exe経由でのインストールをしてたんですけど、これだとgcc-xmlのビルドの段階でエラーが発生しちゃいました。この原因がどうしてもわかんなかったので、あきらめて公式サイトのインストーラーを使うことにした次第です。
ソース一式はCVSから取得できます。CVSクライアントはいろんなのがあるので、好きなクライアントを使って取得しよう。ここではcygwinのCVSを使って、シェルから以下の命令を実行して取得しました。40MBくらいあるみたい。
$cvs -d :pserver:anoncvs@www.gccxml.org:/cvsroot/GCC_XML co gccxml
「Visual Studio 2005コマンドプロンプト」を起動してください。起動したら、さきほど取得したソース一式が格納されているディレクトリに移動して、以下の命令を実行します。
$ cmake .
cmake.exeにはあらかじめパスを通しておくか、パスを直接指定するのを忘れずにね。
gcc-xmlのビルドはまだ終了してなかった! 一度ビルドが終了しても、第二第三のビルドが必要となって…。などと恐れおののきましたが、二段階でいいみたい。
さきほどの処理が終了すると、同じディレクトリに"gccxml.sln"というソリューションファイルが新しくできあがっているかと思います。これをVisual Studio 2005から開いて、Releaseビルドしよう。ビルドが終了したら、以下の5つの実行ファイルができあがっているはずです。
まずは環境変数の設定です。Visual Studio 2005を使っていることを、gcc-xmlに高らかに宣言しておこう。
$ set GCCXML_COMPILER=msvc8
つぎに、gccからVisual Studio 2005のインクルードファイルを使えるよう、パッチをあてます。ありがたいことに、"GCC_XML/VcInstall"ディレクトリ以下にVisual Studioのバージョンによってパッチが用意されています。そのディレクトリと、パッチを当てたファイルを出力するディレクトリ("gccxml.exe"が置いてあるディレクトリ)を指定して、"gccxml_vcconfig.exe"を実行してください。
$ bin/release/gccxml_vcconfig GCC_XML/VcInstall/ bin/release
あとはbin/releaseにパスを通せば、gcc-xmlが使えるようになったはずです。bin/release以下をどこか適当なディレクトリにコピーして、そこにパスを通してもオッケイです。やったね! というわけで、さっそく試してみましょう。
$ gccxml eample1.cpp -fxml=example1.xml
ここでは、解析するC++のソースファイルとしてeample1.cppを入力し、eample1.xmlを出力しています。ちゃんと出力できたかな? できたー! やったー!
以上で終わりです。