fc2ブログ

プログラムは文章と同じ

 実務を行っている人は、教科書で書かれていない事をよくします。教科書では、正しいとされるプログラムを表記して、それを元に解説することが多いです。説明をするという目的から考えると、これは非常に正しい行為なのですが、現実は正しいとされる美しいプログラムだけではありません。本当の実力とは、状況に合わせて、プログラムの表現を変えられる力です。
 アマチュアの人がこれから載せるプログラムを見たらなんと思うでしょうか?おそらく、余計な事をしていると思うでしょう。

//当ブログの割り算と掛け算の共通性から抜粋
//3つの引数を受け取る演算
//プログラムA
private Value Operator(
    char addValue,
    char subValue,
    char remainder )
{
    if ( addValue == this._table.First ||
        subValue == this._table.First ) {
        return new Value( this._table.First );
    }
    Value temp = new Value(
       Sign.Plus,
       this._table.First,
       this._table.First,
       this._table.First,
       remainder );
    char highValue = this._table.First;
    char lowValue = this._table.First;
    while ( remainder >= subValue ) {
        Value v = this.Add( lowValue, addValue );
        lowValue = v.LowValue;
        if ( v.IsHighValue ) 
            highValue = this.Increment( highValue ).LowValue;
        remainder = this.Sub( remainder, subValue ).LowValue;
        temp = new Value(
            Sign.Plus,
            highValue,
            v.LowValue,
            this._table.First,
            remainder );
    }
    return temp;
}

このプログラムは、次のようにかけます。

//プログラムB
private Value Operator(
    char x,
    char y,
    char z )
{
    if ( x == this._table.First ||
        y == this._table.First ) {
        return new Value( this._table.First );
    }
    char highValue = this._table.First;
    char lowValue = this._table.First;
    Value v = new Value( this._table.First );
    while ( z >= y ) {
        v = this.Add( lowValue, x );
        lowValue = v.LowValue;
        if ( v.IsHighValue ) 
            highValue = this.Increment( highValue ).LowValue;
        z = this.Sub( z, y ).LowValue;
    }
    return new Value(
            Sign.Plus,
            highValue,
            v.LowValue,
            this._table.First,
            z ); 
}

プログラミングをかじった人は、プログラムBだけが正しいという傾向があります。ですが実務経験者は、状況に合わせて、プログラムAの方を書き時もあることをよく知っています。
 プログラムBを崩して、Aのように書くのには理由があります。それは、デバッガで変数の変化を追いやすいからです。デバッガには、一ステップずつ実行しながら、変数などの値を表示する機能があります。そのデバッガの機能を使う際には、プログラムAのようにした方がチェックしやすい。
 当ブログが想定している主な読者は初心者ですから、ブログを書く際にはいつも気を付けています。文章とプログラムは、自分を誇示するためにするものではありません。誰かに何かを伝えるために行うものです。文章はもちろんのこと、プログラムも表現を変えなくてはなりません。
 コミュニケーションの手段や媒体は関係ありません。何かを伝えたいときは、対象に合わせた表現をしましょう
スポンサーサイト



テーマ : プログラミング
ジャンル : コンピュータ

関数型プログラミングとは何か

 残念ながら関数型プログラミングは一般的に知られていないようなので、関数型プログラミングを簡潔に解説することにしました。少しでも参考になれば幸いです。
 関数型プログラミングは宣言型プログラミングの一種です。宣言型プログラミングについては、違う記事で解説したので説明を省きます。一種という事は、他の宣言型プログラミングがあるのかと気になると思います。関数型プログラミング以外の宣言型プログラミングでメジャーなものを挙げると、集合型と論理型があります。参照型はSQL、論理型はPrologが有名です。今回は解説しませんが、面白いので一度体験してみる事をお勧めします。特にSQLは避けては通れない存在でしょう。
 本題に入ります。関数型プログラミングというぐらいですから、まずは関数について知らねばなりません。「関数」というとあまり強いイメージがないと思います。これは、漢字と翻訳に問題があったのが原因だと思います。関数はもともと函数と書きます。函(ハコ)という漢字から、何かを入れるものをイメージすると思います。それで大体あっています。しかし、「数」というからには、数以外のものは駄目なのかという印象を受けてしまうでしょう。これは翻訳の問題です。と言っても、念のために言っておきますが、過去に何もないなか苦労して翻訳した人を責めるつもりは毛頭ありません。誤解なきよう。
 関数の元となる英語単語はfunctionです。functionの主な意味は、そのもの本来の働き、機能、仕事におけるその人の職務、任務、職業、事柄の作用、効用です。他にも派生した意味がありますが、ここでは関係ありません。この意味を見ると分かると思いますが、機能もしくは作用というべきものです。すなわち、数に限った話ではないのです。名前に「関数」と、数の文字がついているから、数に限定された数学特有のいかめしい概念だと感じてしまいます。ですが、そんな限定されたものではなく、ただの機能もしくは作用です。それがわかれば、関数型プログラミングが見えてきます。
 functionの意味を直訳して考えると、関数型プログラミングは、機能もしくは作用で行うプログラミングと言えるでしょう。もう少しく゚、意訳的に考えると、物事の機能もしくは作用に着目してプログラム化し、機能もしくは作用で構成するプログラミングと言えると思います。
 これでもまだ意味が分かり難いので、もっと噛み砕いて説明します。函数は入力と出力を考えます。例えば、プラス演算の函数は、2つの数値を入力し、1つの数値を返します。つまり、入力と出力に着目して行うプログラミングとも言えます。こう考えると、イメージしやすいと思います。
 ここまでの説明を読んで、疑問を覚えた人が居るでしょう。おそらくそれは、関数型プログラミングの長所です。長所がなければ、慣れ親しんだ命令型プログラミングをしたいと思うのが人情でしょう。でも心配いりません。ちゃんとした長所があります。それは、全てが眼に見える事です。
 入力と出力に着目してプログラミングをするという事は、同じ値を渡せば、常に同じ値が返されることを意味します。という事は、入力値と出力値をプログラマーが確認できるので、命令型プログラミングと比べると不透明な部分が少ないです。不透明なことが少なければ、テストもしやすく理解もしやすいです。
 命令型プログラミングは、何かをさせる事でプログラミングを行います。従って、機械の状態に依存しているプログラミングと言えます。状態に依存しているという事は、テストするときも同じ状態を再現しなければなりませんし、眼に見えない状態を想像しつつプログラムを理解せねばなりません。その点では、関数型プログラミングの方に軍配が上がります。
 この関数型プログラミングの長所は、非常に大きなものです。プログラミングで問題となるのは、打つ時ではなく、打った後のメンテナンスです。また、テストも重要です。従って、関数型プログラミングは、極めて現代の要求にマッチしたものと言えるでしょう。それ故、命令型プログラミング言語にも、関数型プログラミング言語の要素を取り入れる動きがあるのです。
 関数型プログラミングは一見難解であり、名前を聞いただけで忌避する人も多いでしょう。しかし実際は、とても単純な考えで行うものであり、その長所も現代の要求とマッチしているので、学んで損はないと思います。もしこの記事を読んで、関数型プログラミングに興味が湧いたら、F#を試してみるとよいでしょう。外見に惑わされず、単純な本質に目を向け、積極的に吸収しましょう。それこそが、人間本来の姿だと私は思います。

テーマ : プログラミング
ジャンル : コンピュータ

宣言型プログラミングって何?

 マルチコアのCPUが当たり前になった今、並列処理に強い宣言型プログラミングが今まで以上に注目されています。例えば、昔は命令型プログラミングが当たり前だったC#とVBも、ラムダ式やクエリ式などによる宣言型プログラミングが当たり前になっています。しかしながら、宣言型プログラミングはまだまだ浸透しておらず、古くからプログラミングをしている人は、宣言型プログラミングを否定的に見る傾向があると感じます。そこで今回、そんな現代の必須知識となった宣言型プログラミングの概要を解説します。
 宣言型プログラミングを一言でいうと、「状態に依存せず、どうやってではなく何なのかを記述していくプログラミング」です。状態に依存するとは何でしょうか?それは、命令型プログラミングでは当たり前にやっていたことです。しかし、命令型プログラミングに慣れている人にとって意識するのが難しいと思います。これから噛み砕いて説明します。
 状態の簡単な例を挙げると、「変数値の変化」です。命令型プログラミングでは、変数の値を変えていきます。合計値を計算する過程を思い浮かべると分かりやすいと思います。合計値を命令型プログラミングで求める場合、総合計を格納する変数を宣言し、ループ構文を使って繰り返し値を加算していきます。この時、総合計を表わす変数に値を加算していくのが命令型プログラミングのやり方です。一方、宣言型プログラミングでは、個々の値を関数に渡して総合計を得ると考えます。つまり、計算過程に注目せず、繰り返して加算するという「どうやって」ではなく、総合計とは「何か」と考えるのです。
 普通の人は「どうやって」と「何か」のどちらに注目するのかは、些細な差だと思えるでしょう。結局はプログラミングであり、細かく機械に指示する必要があります。「何か」に注目していても、いつかは「どうやって」に行き着きます。しかし、この些細な考え方の差は意外と大きなものです。
 一番差を感じやすいのは、並列処理プログラミングです。並列処理を「どうやって」と考えると、状態の変化を制御するのが難しくなります。何故ならば、複数のCPUがあっても、メモリは一つであり、一つの目盛を複数のプログラムが読み書きするのですから、どうしても不都合が生じます。「どうやって」を考えると、この不都合で頭がいっぱいになります。一方、「何か」に注目すると、計算過程を無視できるので、状態変化と整合性に注目しなくてもよいようになります。これはあくまでも一例です。並列処理に限らず、「どうやって」ではなく「何か」を記述すると、プログラムの主体が明確になり読みやすくなります。また、状態を無視出来るのでテストも行いやすくなります。そういったことから近年、宣言型プログラミングの需要が高まっています。
 もしかしたら、昔からプログラミングをしている人は、命令型プログラミングの考え方に染まって、宣言型プログラミングの考えに違和感や抵抗感を覚えるかもしれません。しかしながら、これからのソフトウェアやシステムを考えたとき、宣言型プログラミングは避けて通れません。考え方そのものは簡単なので、まずは覚えるとよいと思います。宣言型と命令型の思想について判断を下すのは、覚えた後からでも遅くはないはずです。それに、私たちはプロであり、お客様が求める物を作ることを第一のはずです。求められているものは素早く習得し、好みの問題は後でじっくりと考えるのが最善だと思います。

テーマ : プログラミング
ジャンル : コンピュータ

インドリ流ソースコードリーディング

 ソースコードリーディングは実務や研究で良く行いますが、解説した記事や書籍が中々ないので自分で書く事にしました。先に断っておきますが、効果には個人差がありますし、状況によって最適な方法が異なります。基本的な事だけを書きますので、この記事を元に臨機応変に対処して下さい。
 私がソースコードリーディングで一番大事だと思う事は、早期に全体像を把握する事です。いわゆるトップダウン的な考え方です。理由は読むコード量を減らすのが早道だからです。また、注意力を高める為にターゲットを定めるという理由もあります。
 既存システム/ソフトウェアはコードが膨大なケースが大半です。しかし、時間は限られていますので、なるべく早く理解する事が求められています。その場合、ちょっとずるいかもしれませんが、一番早く読む方法は読まない事です。どれだけ早く読もうとも0秒にはかないません。一度に全てを読む必要はないケースが大半です。読まなくてもよいソースを読むと貴重な時間が浪費されてしまいます。読むべき状況で、読むべきソースを集中的に読むのが一番です。
 トップダウンに全体像を把握する方法は図示するです。図はUMLやマインドマップなど、何でもよいのでシステム/ソフトウェア全体を鳥瞰すると読むべきソースコードが分かりますし変更にも強くなります。元からあるソフトウェアで一番の問題はバージョンアップです。細かい単位でソースコードを読んでいると、バージョンアップした際に混乱してしまうでしょう。全体を鳥瞰しておくと、バージョンアップされても理解できますし、その優れたアーキテクチャ(設計思想)を理解して、自分の技術力を磨く事が出来ます。鳥瞰した後はボトムアップ的な考え方をします。
 全体像を把握し、読むべきソースコードが分かったら、もしくは初めから目的が定まっていたのならば、次はソースコード単位で読解します。ボトムアップ的なソースコードリーディングの方法は、コードを読んで動かすのが基本です。コードを動かして理解する具体的方法としては、テストを書く、解析用コードを埋め込む(所謂printデバッグ)の2つあります。
 テストを書くには、目的の関数/手続きをよく理解し、オブジェクトの初期化方法を知らねばなりません。自分の理解度を確かめる事が出来ます。ソースコードリーディングで大事なのは、自分が正しく理解しているかどうかです。それを確かめる一番の方法がテストです。テストが書けるのであれば、高い水準で目的のコードを理解している事の証明になります。また、安全にソースコードを修正する事が可能となります。
 解析用コードは軽視されがちですが、ソースコードを理解する上で大変有効な手段です。データの変化を見れば、コードの動きを詳細に理解する事が出来ます。ソースコードがあるのですから、積極的に自分が理解しやすいように改変しましょう。改選すると正常な動きをしなくなるかもしれませんので、念のためにソースコード管理ツールを用意すると万全です。
 その他の方法としてリファクタリングも有効です。自分好みにソースコードを変えると理解度が飛躍的にアップします。また長いコードを短くする事により読みやすくなります。応用技として、自分が興味のない処理をしているコードをばっさり切ってしまうのも良いでしょう。そうすればさらに意識を集中する事が出来ます。
 最後にソースコードリーディングを行う前に大切な事を述べます。問題領域の知識を得ておく事が大事です。ソースコードリーディングは準備も大事なのです。分かっていない事を理解する事は不可能です。問題領域の知識があれば、もしくはリーディングと並行的に行わないと処理内容が理解できません。問題領域の関する知識を学習する事を怠ってはなりません。情報処理技術は「情報命」です。
 駆け足でしたがソースコードリーディングの基本が分かったと思います。後は実践あるのみ!です。ソースコードリーディングを活用し、仕事と学習の効果を高めましょう。そうすれば、貴方への評価と、貴方の技術力は飛躍的にアップします。

テーマ : プログラミング
ジャンル : コンピュータ

プログラムクイズでつつくーレベル0-クックアウト。

貴方は、子供が九九のお勉強をする、手伝いをする事になりました。その経緯は貴方の想像にお任せします。そこで貴方は、得意のプログラミングで九九の答えをいつでもPCで見られるようにしようと考えました。でもそのPCは、コンパイラが壊れていて、完全な文法とライブラリが使えません。
さあ、使用するプログラム言語を選んでこのミッションをクリアーしよう!
※言語毎に条件が違うので、徐々に使用できる言語を追加していくピヨ!


【ミッション】
コンソール画面へ九九の答えを出力する。
出力レイアウトは次の通りピヨ。

クックルール、クックルー、答えを言うからよく聞いてね。 by 鳩のクックアウトさん
1 2
2 4
3 6
4 8
5 10
6 12
7 14
8 16
9 18


【C#、VB.NET、C++/CLIを使用する場合】
  • 使用可能な文・・・ for文、変数宣言、乗算演算子。
  • 使用可能な型・・・C#はint、VB.NETはInteger、C++/CLIはSystem.Int32。
  • 使用可能ライブラリ・・・System.Console.Writeのみ!

【Dを使用する場合】
  • 使用可能な文法・・・ for文、変数宣言、乗算演算子。
  • 使用可能な型・・・int。
  • 使用可能ライブラリ・・・std.stdio.writefのみ!

テーマ : プログラミング
ジャンル : コンピュータ

プログラムクイズでつつく0-前置き

ブログを開設してからまだ2月しか経たないから記事が足りなくて、初期の楽習である文法をつつくシリーズだけだったけど、これじゃあ本当の学習は出来ないピヨ。そこでボクは自分が何でプログラミングを楽しいのかと自問自答したピヨォツ。すると自分からこんな答えが返って来た「頭の中のものを実現できるから」。
プログラミングが楽しいという感性は人それぞれだと思うけど、プログラミングによって何かを作るのが楽しいというのは共通だと思うピヨ。だから、それを体現することにしたピョピョ。それがプログラミングクイズだよ。
まずは、ルールを説明するよ。ルールは至ってシンプル。使用する文法とライブラリが指定されているから、その制限の中で課題をクリアするんだ。出される課題はこのブログを読めば分かるように注意するから、挑戦者はこのブログから情報を拾い集めて課題を解いてね。その見返りは自分のレベルアップだよぉ。ボクからは知識以外は何もあげられないけど、解くことによって自分が成長できるという利益を得られるよ。例えると、リアルRPGだね。さあ、今日からボチボチミッションを書くよ。楽しみにしてね。
※解いた人はまだ解いていない人に答えが見えないように配慮してね。

テーマ : プログラミング
ジャンル : コンピュータ

プログラム言語をつつく3-オブジェクト指向プログラミング。生産性のあるサブルーチン。

さて、今回は前回の予告どおりオブジェクト指向プログラミングをつつくピヨ。オブジェクト指向って難しいというイメージがあるけど、そんなこと無いピヨ。難しく感じるのは、オブジェクト指向分析オブジェクト指向プログラミングオブジェクト指向設計を混合して書いてある書籍やホームページが多いからと言う理由と、オブジェクト指向はあくまでも考え方だから言語設計者毎に差異があるからだよ。
ではオブジェクト指向プログラミングの基礎をつつこう。オブジェクト指向には三つの要素があるピヨ。カプセル化継承多態性だよ。また三つ?人間って三つの考えが好きだね。何だか難しそうだけど内容はそんなこと無いよ。名前が難しそうだからそう思うだけだよ。だから肩の力を抜いて一緒に羽ばたこう。

バサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサ


じゃあ最初はカプセル化をつつこう。カプセル化って何だろう?初心者の方は連想できないと思う。ウルトラマンのカプセル怪獣?お薬?閉じ込めるの?・・・そんなわけが分からない事しか思い浮かばないよ。だから名前を気にしちゃだめピヨ。構造化プログラミングを思い出そう。もし構造化プログラミングが分からない人は冒頭近くの「前回」のリンク先を読んでから戻ってきてね。そのまま帰っちゃいやよ。
ここを読んでいると言う事は構造化プログラミングはバッチリだよね。構造化プログラミングでサブルーチン化が重要だと言う事は分かってもらえたと思う。その考えをさらに発展し、プログラムが扱うデータも外部から見えなくするのがカプセル化なんだ。初心者の方はここであれ?となると思う。「データって何?データはサブルーチン化していないの?」ってね。データと言うのは変数とかの事で、実のところ当時1960年代はそうだったんだ。変数はどこからでも見えるし、外部から買い変え放題でプログラムがよくバグっていたんだ。だからプログラムが持つデータの「変数」を隠蔽しようというのがカプセル化って言う事なんだ。思ったより簡単でしょう?プログラミングの初心者はぴんと来ないかもしれないから実例を、プログラム言語ごと記事で書いておくピヨ。プログラム言語ごとに少しずつ違うからね。今の所は変数はなるべく隠蔽した方がいいと覚えるだけでいいピヨ。素直さが肝心だよ。

バサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサ


次は継承をつつこう。継承?これまた難しい単語だねぇ。名前だけで嫌になるピヨ。だけどこれも案外簡単だから頭を白紙にして聞いてね。継承とはコードの重複をなるべく無くすためのものなんだ。プログラムは結構似た処理を書くことが多いんだ。じゃあ、どうやってその重複を防ぐのかと、当時の偉い人たちが頭を悩ました結果コードを引き継げばいい事を思いついたんだ。それが継承ピヨ。親から子へ遺伝子を受け継ぐってわけさ。
初心者の方はコードの重複が如何にバグを生むかぴんとこないと思う。だけどコードの重複はバグの元なんだ。何でかって?コードがほとんど同じだったら打つのが面倒だし、開発の効率性を高めようと思えば、オブジェクト指向を知らない大概の人はプログラムをコピぺすると思う。だけど、後でソフトの仕様が変わってそのプログラムを変更しなくっちゃならない時はどうする?元のコードを書き換えてエラーチェックしてから、またコピペしなくちゃならないピヨ。そうなると、人間の記憶は完璧じゃないから、変更忘れが生じる可能性が高い。そうなったらバグ発生!ってわけピヨ。あー想像するだけでも鳥肌が立つよ。あっボク鳥だった。それはともかく、一箇所変更するだけで深夜まで残業して変更するの誰でも嫌だろ?
ボクは何故かオブジェクト指向を禁止しているブラック企業に働いた事あるけど、そりゃもう地獄だったさ。勿論モジュール化はしてあったんだけど、オブジェクト指向は階層型だから人間が把握しやすいけどモジュールはそんな関係ないから数万行になった時ややこしくって仕方が無い。アーやだやだ。賢明な読者は継承でコードの重複を撲滅しよう!
継承はこれでおしまい。じゃあ次いくピヨッ

バサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサ


いよいよ最後になりました。最後は多態性ピーヨ。これまた難しい名前だね。もっと簡単な名前無かったのかなぁ。なんか箔をつけるために知ってて難しい名前を考えたような気がするピヨ。それはともかく、内容はやっぱり簡単だよ。リラックスしてね。
多態性とは要するに呼ばれたオブジェクトが動作を決めると言う事なんだ。何でそんなことをするかって?それは、呼び出す側がいちいち「あーこれはColorオブジェクト君だからこうやって、ApplicationColor君の場合はえーと・・・」と考えていたらサブルーチン化出来ないからだよ。オブジェクトが増えるたびに呼び出し側が処理を追加していくよりも、呼び出される側が処理を書いた方がコードの重複が無くなるピヨね。呼び出す側が処理を書いていたら呼び出し側の数だけコードが重複するけど、呼び出される側で処理を書いたら1箇所で済むってわけさ。全てはコードの重複が憎いぃと言う事なんだ。コードの重複はそこまで嫌われているんだ。多態性についてはこれでおしまい。纏めに入るぞ。とぉー。

バサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサ


まとめだよ。どう?オブジェクト指向プログラミングって思ったよりも難しくないと感じたと思う。熟練の人は足りない説明が目に付いたと思うけど、始めから全て覚える必要は無いし、僕らはプログラミングする側だから美しい理論よりも役に立つ実践的思考の方が大事なんだよ。この記事の内容を覚えたら後は実践あるのみ!オブジェクト指向プログラミングなんて怖くない。もともと楽をするために作ったものなんだから使って損は無いし、そんなに難しくはないのさ。
ということでお後がよろしいようなので、これにて御終い。一件落着~落着~

テーマ : プログラミング
ジャンル : コンピュータ

プログラム言語をつつく2-構造化プログラミング。わかりやすくまとめよう。

今回からプログラム言語に依存しないプログラムの理論を説明するピヨ。
第一弾は構造化プログラミングだよ。
構造化プログラミングとはエドガー・ダイクストラさん達が提唱した理論で、 全てのプログラムは順次構造繰り返し構造選択構造で表現でき、 それをサブルーチン化することにより保守性がよい高品質なプログラムが組めるというものさ。
現在では当たり前のように思えるけど、当時(1960年頃)はどうやらGoto文を使った非常に読みずらいプログラムが跳梁跋扈していたらしいね。 このGoto文は確かに有用で現在にも残っているけど、上から下へプログラムが流れないから多用するととても見づらいんだ。 それを改善するために提唱されたのが構造化プログラミングって訳さ。 ボクが産まれる前の事だから見たことないけど、以前勤めていたブラック企業で可読性0のプログラムと対面したことあるから なんとなくわかるよ。きっと怒りが込み上げるんだろうね。 前置きはこれぐらいにして個別に見ていこう。とぉー。

バサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサ

まずは順次構造~解説するピョ。 順次構造というのは、1個の処理が終わったら次の処理を行うというふうに、 順番に処理をしていくプログラムなんだ。 制御構文が一切ない状態のプログラムだと思えばいいよ。 これを直線型と呼ぶピヨね。 これは特に説明の必要がないピヨね。

バサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサ

次は繰り返し構造ピヨ。 これはC言語のfor文とかVBのFor文とかを思い浮かべてくれればいいよ。 これを細分化すると、while文の様にループ条件を最初にチェックする前判定繰り返しと、 do/while文の様にループ条件を最後にチェックする後判定繰り返しがあるピヨ。 そうそう、for文は紛らわしいけど列挙型繰り返しと呼ばれているんだ。 じゃあ、繰り返し構造はこれぐらいにして次へ行こう!

バサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサ

最後は制御構造ピョ。 これはif文の構造なんだ。これはみんなお馴染だよね。 順次構造だけでは不便だから流れを分岐するこれは自然な発想だよね。 目ざとい読者はswitch文はどうなんだ?とツッコミを入れた思う。 それは他方向分岐と呼ばれるものなんだ。 だからVB.NETではCase句に判定条件をかけるんだろうね。 じゃあ制御構造についての説明はおわり。

バサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサ

全部の説明が終わったから纏めに入るピピョ。 この構造化プログラミングは現在に残る大切な考え方なんだ。 オブジェクト指向だとかアスペクト指向とかエージェント指向などいっぱいあるけど、 この構造化プログラミングは全ての基礎となる構造だからしっかりマスターしよう。 これら三つの構造をしっかりサブルーチンとしてまとめると 読みやすいプログラムになるよ。 この基礎的考えさえマスターすれば、オブジェクト指向などもわかりやすいと思うよ。 長い文章を読んでくれて有難う。 これで終わるよ。 じゃあねー。

テーマ : プログラミング
ジャンル : コンピュータ

プログラム言語をつつく1-みんなにご挨拶

みんな元気かい!ボクは元気だよ。
元気がありまって、今色々な言語を突っつきたい気分だよ。口がむずむずする。
だから各プログラム言語に挨拶をして回ったんだ。
訪問した言語を一覧するよ。
この記事も随時追加And更新するピヨ。

バサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサあー急がしー

「命令型言語」
「関数型言語」
「スクリプト言語」
「アセンブラ」
「マルチパラダイム」

「マイナー言語」※この部門はボクの鳥仲間・鶏唐揚さんの所へのリンクです

テーマ : プログラミング
ジャンル : コンピュータ

プログラム言語をつつく0-百花繚乱

突然だけど、僕インドリはふっと思った。プログラム言語の機能はどんなものがあるのかな?
そして猛烈にプログラム言語の機能を纏めたくなった。
ということで、この記事にメジャー言語が持っている機能を書き連ねる事にした。
えっ!そんなことして何の意味があるかって?
意味なんてないよ。ただなんとなくやりたくなったんだ。
ということでプログラム言語の機能を箇条書きにするよ。
もちろんこの記事は随時追加And更新するよ。

【 計算機能とそれに関する要素 】

構造化プログラミングに関係する機能や要素
オブジェクト指向プログラミングに関する機能や要素
【 メタプログラミングに関係する機能 】
  • プリプロセッサ
  • テンプレート
  • リフレクション
  • ジェネリック

【 アスペクト指向プログラミングに関係する機能 】
  • 属性

【 動的プログラミングに関する機能 】
  • 暗黙的型付け、型推論・・・ DOCaml

【 データ中心アプローチに関係する機能 】
  • LINQ(Language Integrated Query)

【 構造に関する要素 】
【 関数型の要素や機能 】
  • 変数束縛・・・ OCaml
  • 評価束縛・・・ OCaml
  • ラムダ式

【 関数に関する機能 】
  • 再帰関数・・・ OCaml
  • 末尾再帰・・・ OCaml
  • 高階関数
  • 特異メソッド
  • イレテータ
  • 拡張メソッド
  • メソッドコンビネーション
  • オペレータメソッドコンビネーション
  • ミックスイン
  • クロージャ
  • パーシャルメソッド

【 エラーに関する機能 】
  • 構造化例外処理・・・ C#( 01)、 VB.NET( 01)、 C++/CLI( 01)

【 オブジェクトの生成と消滅に関する機能 】
  • ガベージコレクション(GC)
  • デストラクタ
  • オブジェクト初期化子

【 通知に関する機能 】
【その他】
  • コメント・・・ OCaml

テーマ : プログラミング
ジャンル : コンピュータ

プロフィール

インドリ

Author:インドリ
みなさん、はじめまして、
コンニチハ。

ボクは、無限の夢(infinity dream)を持つネタ好きな虹色の鳥インドリ(in dre)です。
色々な情報処理技術を啄ばむから楽しみにしてね。

http://twitter.com/indori
は別人による嫌がらせ行為です。
私とは関係ないので注意して下さい。
次はなりすましブログなどをするかもしれませんが、ここ以外でブログをするつもりがないので、ここ以外にインドリのブログがあったとしても無視してください。


何度言っても分からない人がいるので、ここにコメント欄へ書き込むときの注意事項を書きます。


一、社会人としてのマナーをわきまえましょう。
一、妄想に基づく書き込みを止めてください。
一、暴言の類は書かないで下さい。
一、某誹謗中傷サイトの書き込みは彼らの妄想に基づく書き込みですから無視して、ここへ書き込まないで下さい。
一、コメント書く前に他のコメントよく読んでから行って下さい。
一、言いがかかり等の行為を禁止します。
一、その他常識的に考えて迷惑なコメントはしないで下さい。


以上のルールを守れない人のコメントは削除します。



利用上の注意
ここに紹介してある文章およびプログラムコードは正確であるように心がけておりますが、内容を保証するものではありません。当サイトの内容によって生じた損害については、一切の責任を負いませんので御了承ください。


執筆したCodeZineの記事


【VB.NETで仮想CPUを作ろう】

  1. VB.NETで仮想CPUを作ろう
  2. レジスタの実装
  3. 仮想CPUのGUI化
  4. テストドライバの改良
  5. CPUの基礎動作の実装
  6. MOV命令の実装
  7. ADD命令実装
  8. SUB命令実装
  9. INC命令&DEC命令の実装と命令長
  10. MLU命令の実装とModR/Mについて
  11. DIV命令の実装とイベント設計について
  12. 機械語駆動式 関数電卓を作ろう!
  13. 機械語駆動式 関数電卓を作ろう! 解答編(前半)
  14. 機械語駆動式 関数電卓を作ろう! 解答編(後半)


【仮想ネットワーク実装でTCP/IPを学ぼう】
  1. TCP/IPの基礎と勘所
  2. ネットワークアクセス層の勘所
  3. インターネット層の勘所
  4. トランスポート層の勘所
  5. アプリケーション層の勘所
  6. セキュリティの基礎と仮想ネットワークの仕様
  7. GDI+と独自プロトコルの定義



【並列化】
インテル Parallel Studioを使って並列化プログラミングを試してみた
並列プログラミングの効率的なデバッグを実現する「Parallel Inspector」


【TBBシリーズ】
  1. インテル スレッディング・ビルディング・ブロックの概要
  2. インテルTBBから学ぶループの並列化
  3. スレッドセーフとインテルTBBのコンテナ
  4. インテルTBBのスレッドクラス


【OpenMPシリーズ】
  1. OpenMPの基礎構文
  2. OpenMPの実行時ライブラリと並列ループ
  3. OpenMPのメモリモデルとfork- joinモデル

最近の記事
最近のコメント
月別アーカイブ
カテゴリ
Ada (9)
COBOL (5)
C (9)
C++ (11)
C# (370)
D (25)
Java (8)
Perl (1)
Ruby (14)
PHP (2)
Boo (2)
Cobra (2)
LISP (6)
F# (33)
HTML (0)
XHTML (0)
CSS (0)
XML (0)
XSLT (0)
Scala (4)
WPF (0)
WF (2)
WCF (0)
LINQ (4)
MONO (5)
Linux (0)
MySQL (0)
ブログ内検索
リンク
最近のトラックバック
RSSフィード
ブロとも申請フォーム

この人とブロともになる

QRコード
FC2カウンター