So-net無料ブログ作成
検索選択
プログラミング ブログトップ
前の5件 | -

検索にガンガンヒットするホームページの作り方―SEO(検索エンジン最適化)テクニックで効果的にPRしよう [プログラミング]

2005年4月に出版されたSEOの本。

SEOとはSearch Engine Optimizationの頭文字をとってもので、検索エンジン最適化などと訳される。具体的には自分のウェブサイトを検索結果の2ページ目以内に表示できるように作りかえるということ。

ネットユーザーの80%は検索エンジンを使っているが、最初の1・2ページしかみないので上位表示が重要になる。

検索エンジンはユーザーの役に立つページを上位表示しようとしている。
掲載順を決めるのはアルゴリズム。アルゴリズムに高く評価されるウェブサイトをつくるのがSEO対策。

SEOの利点
検索エンジンを使うユーザーが多い
検索キーワードで集客できるので興味ある顧客だけを集められる。キーワードの予想が大切になってくる。
興味のあるユーザーが多いのでコンバージョン率が高い。
ROI(費用腿効果)が優れている。検索エンジン上位に表示することは無料でできる。一方でアフィリエイト広告やメールは費用がかかり、やめればそれでおしまい。

検索エンジンは使う方からみるとどれでもいっしょ。
しかし大きく2種類ある。
ディレクトリ型とロボット型。

ディレクトリ型はカテゴリーによる分類で掲載される。登録にはこちらから検索エンジンにウェブサイトを申請し、エディターが眼でみて審査する。登録するときの簡単な紹介文はエディターが書く。
欠点は掲載サイトが不足している、検索が不便、ウェブページ単位で検索できない。

ロボット型検索エンジンは、スパイダー(クローラー)がディレクトリ型検索エンジンからはじめて巡回する。収集した文字情報を持ち帰りデータベースにする。クエリープロセスがデーターベースから最適な情報を探し出す。検索結果でランク付けをおこなうのはアルゴリズム。
長所は膨大なウェブページを収集、検索可能にする。
ウェブページ単位での検索ができる。
どんなキーワードでも検索できる。
短所は、返す情報が大きすぎる。新しい情報が検索できない。(クローラーがきていないので)
ディレクトリ型に登録してあるウェブサイトは基本的にロボット型に登録する必要はないが、念のためやっておくことをおすすめする。

ハイブリッドはディレクトリ型とロボット型で相互補完。
結果を何段階かにわけて表示する。
日本の主要検索エンジンを分類。この時点でロボット型はほぼgoogle。

SEOによる上位表示はロボット型でのみ可能。ディレクトリ型への登録も必要。


☆ロボット型検索エンジン対策
評価してほしい要素をロボット型検索エンジンに適切に伝えられるように、個々のウェブページのHTMLコーディングやウェブサイト構造を見直す。

ロボット型検索エンジンがウェブページを評価する視点
ページ内要因、ページ外要因。
以前はページ内要因だけで判断していたけど、やたらとキーワードをうめこむなどスパム行為が横行してかわりました。今はテキスト要素、リンク要素、テーマ要素で評価しています。

ページ内要因・・・含まれている文字や出現回数、文字の配置、titleタグに含まれている情報。画像のalt属性に含まれている文字といった要素

ページ外要因・・・評価対象のウェブページにリンクをはっているウェブページ。リンクの数、アンカーテキスト上の文字。

テキスト要素・・・クローラーはテキスト文字しかよめない。場所(title,strong b h1,h2)、密度(キーワードの出現割合)、位置関係(近い位置は相関が強いと判断)

タグ・・・最重要視される。ページごとにタグを変えた方が効果的。titleタグとbodyタグのテーマには一貫性を持たせる。また検索結果の見出しになるのでわかりやすく。固有名詞だけをいれるのは、会社名で検索されるほどの有名な企業でないと意味がない。 リスト内で目立たせようと☆などの記号をいれる、同じキーワードを複数並べる、テーマと違うキーワードを並べるなどは検索エンジンからの評価が下がる。また、ディレクトリ型エンジンには効果なし。 <meta>タグはクローラーにページの要約や関連キーワードを適切に伝えるために用意されたタグ。<description>は要約文、説明文。<keywords>は検索させたいキーワードを記述、複数いれたいときには半角カンマをいれる。これをheadタグに入れておくと有効になる。ディレクトリ型検索エンジンには効果なし。悪用するユーザーが多かったので今はあまり有効でない。 <a>タグ・・・検索エンジンはリンク元とリンク先で重要なキーワードとみなされる。だから「こちら」などをアンカーテキストにしない方がよい。 <hx>タグ・・・<h1><h2>などのタグで数字の小さい方が上位階層に位置する見出しになる。<h1>タグには<title>タグに記述したキーワードと同じキーワードをいれるとページの関連性を高められる。文書レベルを無視した使い方はNG。<h1>タグを利用できるのは基本的に1ファイルに一回。このタグはスタイルシートを利用できる。 <ul><ol>タグ・・・箇条書きに使う。項目に出現するキーワードが重視される。 <strong><em>タグ・・・論理的強調。多用すると強調する部分がわからなくなる。 <center><div align="center">タグ・・・文書の中央に表示するので他の部分より重視される。 リンク要素(Link Component)の評価の仕組み・・・リンクを貼られるサイトには価値がある。リンクには参照、紹介・推薦という意味があると考えられるから。そのため検索エンジンの会社はリンク構造に着目した評価方法を開発した。 リンクポピュラリティー・・・張られているリンクの質と数によってウェブサイトの重要度を判断する方法、代表的なのはGoogleが採用するPageRank技術、infoseekのマルチプロセススコアリング技術。多くのサイトからリンクされている、質のよいサイトからリンクされていることが評価をあげる。 リンクレピュテーション・・・リンクポピュラリティーをさらに発展させた評価指標で、他のサイトから張られたリンクのアンカーテキストで評価する。検索エンジンで軒並み採用されている。 PageRankとは・・・Googleの開発したサイト重要度を判定する仕組み。リンクを投票とみなしてリンクを張られたサイトを加点。こういったページ外要因をいれることで、ページ管理者の悪意ある操作を回避できる。 クリックポピュラリティー・・・ユーサーがどれをクリックしたのかをカウントして、掲載順位に反映させる。ただし故意に操作されやすいので影響は大きくない。 自分のサイトのPageRankを知る方法・・・Googleツールバーでみる。(2016年現在サービスなし) PageRankは絶対ではない。 Googleのウェブサイト評価方法 1検索キーワードを含むすべてのウェブページをリストアップ 2ページ内要因の評価による順位付け 3インバウンドリンクによる評価付け 4PageRankによって順位を調整 コラム Teomaと「Subject-Spedific Popularity」は関連テーマのリンクしか評価しない。 クローラーがサイト内全体を巡回できるようなサイト内リンクを構築しておく。 クローラーに優しいナビゲーション ・ナビゲーションメニューは<a>タグで設置 ・個々のメニューはテキスト文字で表現 ・メニューの名称はわかりやすく、できればキーワードを含んだものにすること ・JavaScriptやDHTML、Macromedia Flashで作らないこと 画像リンクにはalt属性にキーワードをいれておく。 JavaScriptなどは訪問者にアピールするが検索エンジンにはアピールしない。そして検索エンジンに表示されないなら存在しないも同然。もし作ってしまっていたら、取り除くのア困難なので各画面の別の場所にテキストベースのリンクを設置するとよい。例えばページの一番下にいれると、上に戻らなくてもよくなりユーザビリティを高めながらSEO対策もできる。 クローラーにサイト内の全ページを巡回してもうのにサイトマップを設置するのも効果的。 ユーザへのサイトマップと違うのはテキストで咲くシエすること。リンク先ページのキーワードを含んでいること。ユーザーにとってもわかりやすい見出しだとなおよい。 リンクが多すぎると全部巡回してもらえないので、リンクは50程度にとどめておく。それより多いときはページを分ける。 クローラーが不自由なく読めるリンク形式は<a>アンカータグ。 SEOにおけるリンク対策 ・外部サイトからリンクをもらうこと ・ディレクトリ型検索エンジンに登録すること リンクをもらいたいのは ・GoogleのPageRankの高いサイト ・リンク元のページに設定されている外部リンクが少ない方が高く評価してもらえる ・自分と同じトピック、テーマを取り扱っているサイトからリンクをもらうほうが高く評価してもらえる リンクしてくれるサイトを探す ・相互リンクを依頼する ・専門リンク集や検索エンジンを探す ・自分のサイトにコンテンツを増やす  コンテンツを増やすときには、   ・古くなった情報も必ずバックナンバーを掲載しておく   ・掲載するURLはできるだけルートドメインに近い階層(浅い階層)にする   ・サイトと関係のないコンテンツを増やさない 登録されていないサイトからのリンクは無効なので、自分のサイトにリンクを張っているサイトを調べ、もし登録されていなければ登録する。 自分のサイトにリンクを張っているサイトを調べるには、検索ボックスで「link:」のあとに自分のサイトのURLをいれる。 テーマ・・デパートのフロアのように、トピックや話題を絞り込んで情報の受け手が理解しやすいようにする。 新しい概念「サイトテーマ」・・・個々のウェブページには必ずある1つのテーマが含まれているはずであり、さらに複数のファイルで構成されるディレクトリやウェブサイトも、必ずその集合が1つのテーマを持っているはずだ」という考えに基づいて考案されたアルゴリズム要素。各ページがなんのテーマなのか、またそれがどの程度絞り込まれているのか同時に解析する。 例 トップページ=海外旅行    テーマ北米方面 テーマニューヨークのパッケージツアー 検索エンジンではユーザーがいれたキーワードから属するテーマを選びそのテーマと合致するウェブページをデータベースから抽出していく。ユーザーが「海外旅行」と検索したらトップページが上位ランクにはいるが、「海外旅行 北米」ならその下のページが上位ランクにはいるはずである。 検索キーワードのテーマに合致して、ちょうどいい具合にフォーカスされていると検索エンジンに評価してもらうには、サイトの中にできるだけ多くの「テーマ」をつくり、ユーザーや検索エンジンが理解しやすい形で配置する。 情報構築(情報アーキテクチャ)・・・ディレクトリやウェブページをサイトテーマに従って整理すること。 情報構築のルール ・サイト全体がある1つのテーマを持つような情報を掲載する。 ・ディレクトリごとに1つのテーマを持つようにウェブページを分ける ・個々のウェブページが一つのテーマを明確に持つように作成する。 基本的にはドメインとディレクトリによってある程度大まかな情報を分類したあと、コンテンツを載せるウェブページ一つ一つのテーマを明確にしていく。 検索エンジンはディレクトリごとに「index.html(あるいは同等のファイル)」を探そうとするので配置した方がよい。 テーマを情報で分類するのはSEOのため。 具体的にはキーワードを分類する。海外旅行のサイトを例に。 ディレクトリをわけると、ユーザーが一番しりたいページにダイレクトに誘導できるメリットがある。 情報がテーマで分類できなるテーマごとにディレクトリを分類する。階層が深くなるほどテーマが絞り込まれていけばよいので浅い階層はおおまかに。 各ウェブページのテーマはタグできっちり表現 ・<title>タグには重要なキーワードをいれておく。テーマの異なるキーワードは同時にいれない ・<hx>タグには重要なキーワードをいれておく、デザイン上使えないなら、<body>タグのできるだけ直後に重要なキーワードを記述する。 コラムKEIデータベースで、SEO対策を行うのに有効なキーワード選出を行うための1つの参考値。 SEOの第一歩はキーワードの選定 キーワード=ターゲットユーザー 顧客が使うキーワードを想定する 言い換えられる言葉を探す。「光」「光ファイバー」「FTTH」といったもの。類義語はシソーラスで探すのもよい。 キーワードは複数選ぶ。この時点でも60%のユーザーが複数のキーワードで検索している。 よく使われる組み合わせを探す。例「自動車保険 見積もり」「無料 英会話」「着メロ 作成」「メール マナー」 地域名を入れるのも有効。 例 「不動産 渋谷」「ディズニーランド近く」 Googleアドワーズ広告やオーバーチェアといった広告型検索サービスが提供するキーワード検索ツールを使うのも有効。 リストアップしたら、個々のキーワードでどのウェブページが上位に表示されるようにするか考えて、ユーザーが探し求めている情報に1クリックでたどり着かせるような配慮が必要になる。 ユーザーがみるのは検索結果の「見出し」と「説明文」、これは検索順位より重要。コピーライティングがクリック率を左右する。 ユーザーは見出しと説明文で、検索結果の正しさを判断する。またおもしろい方、役にたちそうな方を選ぶ。 見出しは<title>タグを表示する。説明文は<description>か、キーワードが出現する前後の文章を表示する。 効果的なコピーライティング キーワードを繰り返さない 重要なキーワードは2個程度に絞る 重要なキーワードから記述する コラム 漢字の送り仮名。「ひっこし」がいろんな変換がある。現在はGoogleも対応しているが、この時点では「引越し」「引越」は別の結果だった。 ランキングにマイナスの影響がある要素 クローラーは基本的にテキスト要素しか読み取らないので、デザイン的に凝りすぎるとSEO的にはマイナスになることが多い。 ・JavaScriptを<head>内におくと<body>タグが押し下げられてマイナス ・画像はクローラーは読み取れない。多用するとマイナス。 ・Macromedia Flash は評価されない ・動的ページ=ASPやPHP、JSPなどの技術を利用して生成されるウェブページ。URLに「&」や「?」などのパラメータがついている。多くの場合クローラーは動的ページをインデックスしない。 ・クローラーはフレームを嫌う。複数のファイルで一つのページを構成しているから。ユーザビリティからいってもお気に入りに入らないのでフレームは不向き。 JavaScriptはSEOにとっては邪魔。対策としては「.js」という拡張子で外部ファイルにする。<noscript>タグを使いクローラー用のリンクを用意するなど。 スタイルシート(CSS)は外部ファイル化する スタイルシートは見栄えを整えるがSEOには邪魔なので「.css」ファイルとして外部化する。 コラム カタカナ表記のゆれについて本の執筆時点では検索エンジンごとに対応が異なったらしい。 スパイダーは動的ページを読まない。理由はスパイダートラップを避けるためと、ユーザーにウソの情報を与えないため。 この本の時点でGoogleは動的ページをインデックスしはじめている。効果的に動的ページを巡回してもらうための方法 ・動的ページのURLパラメータを一つにする ・静的ファイルから動的ページにリンクを張る ・ペイドインクルージョンを利用する(有料) コラム アマゾンジャパンは動的ページの「&」や「?」をURLに書き換えるようにサーバーで処理しているので個別商品ページがインデックスされている。 フレームを利用した場合、親フレームはインデックスされず、子フレームが単体でインデックスされてしまう。ユーザビリティにもマイナスなのでフレームは使わない。 コラム 3分でできる簡単なページ最適化の方法 HTMLの原則に沿って書いた場合の例がのっていた。ヘッダにタイトル、ボディに見出し、中見だし、第一段落100文字、第二段落80文字、第3段落100文字、というスタイル。こういうシンプルなものが検索エンジン最適化。ただしユーザーにはまったくアピールしない。サイトテーマが明確になっているか考えるときに使おう。 SEOテクニックのまとめ ・ページごとにテーマをはっきりさせる。それを<title><body><a><h1>などのタグにキーワードで表現する。そのページを1語か2語のキーワードで表すと何になるのか考えるとよい。 ・<body>タグ直後にできるだけ文章がくるようにする。複雑なレイアウトがきたりしないように! ・各ページごとに200~400文字程度のテキストをいれる コラム フレッシュクロール、検索エンジンがインデックスするまでの間があるのでフレッシュクロールで巡回した日付を表示できるようにした。定期巡回は日付がはいらない。 フレッシュクロールは検索有効期限がある。 ☆ディレクトリ型検索エンジン対策 効果があるのはYahoo!ジャパンとDMOZ。 ディレクトリ型検索エンジンに登録されるということは被リンクをもらうことになるのでロボット型検索エンジンのランキングにも好影響がでる。 登録の仕方。 無料と有料がある Yahoo!ジャパンはハイブリッド型検索エンジンの最大手。自社製のディレクトリ型検索がメイン。 当時のYahoo!カテゴリを使った検索などの解説。 Yahoo!ジャパンで最適なカテゴリーを探し登録する方法の解説。 ・カテゴリーは検索キーワードと一致するものを選ぶ。検索キーワードを含むカテゴリ名、見出し検索、紹介文を含むウェブサイト。掲載数が少ないカテゴリーの方がよい。より詳細なカテゴリを選ぶ。賞用サイトなら「ビジネスと経済」のカテゴリから申請する。 申請には、連絡先のメールアドレスのドメインはサイトドメインと一緒がよい。タイトルには誇大広告的な表現を使わない。 URLはトップページのものだけを記入。 他にも項目ごとに何をいれるか細かく解説あり。 紹介文はエディターの手がはいあるので、エディターに考えさせない、そのまま掲載できそうな文章をエディターの文字数や癖から掴んで考えて申請する。 申請したら1か月まってみる。ビジネスエクスプレスでも確実に登録してもらえるとは限らない。 原則として1企業1URL。 登録申請のルールは必ず守ること。 DMOZに登録されるための方法 最適なディレクトリを探す。エディターのいるカテゴリーが審査が早いのでそこに申請する。フォームの項目ごとの細かい入力方法。 掲載されるまで3~6週間 有料の審査サービスはない。登録できるのは1サイト1URL。ルールを守り神聖視、外国サイトも登録できる。 ボランティアが運営しているので、あなたもDMOZエディターになれるかも。 Yahoo!とDMOZ合格度を診断するチェック項目 ・トップページはわかりやすいか?ユーザーになんの情報を提供しているかわかる。 ・サイト内ナビゲーションは適切か? ・コンテンツがわかりやすい形で提供されているか? ・取引に関する情報は明記されているか? ・十分なコンテンツはあるか?ユニークな情報を提供しているか? ・サイト内にリンク切れ、表示されない画像はないか? ・工事中のページはないか? ・主要なブラウザで閲覧できるか? ☆検索エンジンスパム 検索エンジンスパムとは、検索結果の上位に表示させることだけを目的に、検索エンジンアルゴリズムを悪用した手法を実践し、検索結果の精度を低下させる行為。 検索エンジンはユーザに短時間で正確な情報を提供することを目的にしているのに、それを邪魔するのでダメ。 検索スパムの悪質さでペナルティに段階がある ・検索結果ランキングの低下。 ・検索エンジンのインデックスから除外される ・スパム行為をしたサイトを運営しているドメインごと禁止される ・スパム行為をしたサイトをホストしているIPアドレスごと禁止される。 コラム 検索スパムをしたIPアドレスが中古ででていて、それを使うとインデックスされないので注意。 もしペナルティをうけたら ・スパムとみなされる要因をすべて取り除く。 ・取り除けたら、再度登録申請を行う ・ドメインやIPアドレスが抹消されたら、取り直すしかない。 検索エンジンスパムとみなされる基準は? ・検索エンジン会社によって異なる。 ・スパム行為は長期的には利益が薄い、スパム行為となる可能性があることはしない。 具体的なスパム行為 ・クローキング・・・クローラーか人か判別して、クローラー用のページをつくる ・背景と同色の隠し文字を使う ・人に見えない小さなフォントを埋め込む ・<noframe>タグを使って見えないキーワードをうめこむ ・<noscript>タグを使って見えないキーワードをうめこむ ・CSS-Positioningwoを使って画面外にキーワードを配置する ・ルールを無視した<meta>タグの記述。複数のdescription、keywordをいれる。大量のキーワードや文章を並べる。 ・リダイレクト・・・本来はURL移転の際などにつかうものを、検索上位に表示されるキーワードだけのページをつくり、そこから別のURLにリダイレクトで飛ばす。登録されたサイトと飛ばされるサイトが違う。大きなペナルティが課せられる。 ・Refreshによるリダイレクト・・・現在の検索エンジンには効果がないのでペナルティもない。 ・JavaScriptによるリダイレクト・・・Refreshタグの方法を改良したもので、スパムとみなされる。 Macromedia Flashによるリダイレクト・・・スパムとみなされる。 本当にウェブサイトが移転したとき以外はリダイレクトはスパムとみなされることが多いので注意。 ・ドアウェイページ・・・ウェブサイトへの入り口をたくさんつくること。ドメインを沢山とってドアウェイページをつくったり、ドアウェイページを自動生成するツールなどで大量生産されたが、ページ外要因がランクに影響するようになって有効性はなくなった。そのうえスパムとみなされる。 ・ドメインを利用したテクニック・・・検索エンジンがURL文字列も考慮して表示順位を決定するという点を利用してURLやディレクトリ名にいろいろな方法でキーワードを埋め込む方法。悪用するとスパムとみなされる。 ・フェイクコピーリスティング・・・上位に表示されているウェブサイトのHTMLソースを丸写しすること。ページ外要因をみるようになって通用しない上にスパムであり著作権侵害。 ・リンクスパム・・・作為的なリンクを操作して順位をあげる行為。ユーザーに利益がないリンクはリンクスパムとみなされる。 ・隠しリンク・・・ブラウザでは見えないリンク。スパムとみなされる。 ・リンクファーム・・・無関係なサイトが相互リンクを張る行為をするとスパムとみなされる。悪質なSEO会社は依頼者のサイトを勝手にリンクファームにいれたりするので注意。不特定多数のウェブサイトすべてにリンクを張るように指示してくるのはスパムのリンクファーム。内容を吟味した相互リンクは大丈夫。 ☆SEOを依頼するとき失敗しないコツ ・会社の評判を、メディアで調べる。変動が激しいので業務経験の長さも重要な要因。クライアントのサイトを検索して表示してみることで仕事ぶりがわかる。 ・SEO会社の提供するサービスはクライアント次第。目的を明確にして、提供サービスと合致しているか調べよう。 ・SEOサービスには相場がない。高いからよいということはない。かけられる予算と費用対効果をはっきりさせる。相見積もりをとり不明な点はつっこんできく。契約前に何に対して料金が発生するのか明確にする。 ・SEO会社が素人や部外者にわかりやすく説明できるかみる。意志の疎通が一番重要なのでコミュニケーションスキルをみること。 ・どのような手法でSEOをするか大まかでも理解しておく。スパムになっていないかチェックする。SEO会社のウェブページのHTMLソースを確認して、スパムがないかみておこう。 ・ランキング保証をする会社は怪しい。検索エンジンのシステムは日々更新されているからである。マイナーな検索ワードやマイナーな検索エンジンでの上位保証かもしれないので注意する。 <!-- amazon --> <div class="sonet-asin-area"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798103462/aaaaaaaaaaam-22/ref=nosim" target="_blank"><img src="http://ecx.images-amazon.com/images/I/510NVNSNEWL._SL160_.jpg" class="sonet-asin-image" alt="検索にガンガンヒットするホームページの作り方―SEO(検索エンジン最適化)テクニックで効果的にPRしよう" title="検索にガンガンヒットするホームページの作り方―SEO(検索エンジン最適化)テクニックで効果的にPRしよう"></a><div class="sonet-asin-info"><p class="sonet-asin-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798103462/aaaaaaaaaaam-22/ref=nosim" target="_blank">検索にガンガンヒットするホームページの作り方―SEO(検索エンジン最適化)テクニックで効果的にPRしよう</a></p><ul><li class="sonet-asin-label">作者: 渡辺 隆広</li><li class="sonet-asin-label">出版社/メーカー: 翔泳社</li><li class="sonet-asin-label">発売日: 2003/04/10</li><li class="sonet-asin-label">メディア: 単行本</li></ul></div></div><div class="sonet-asin-break"></div> <!--/ amazon --> </noscript></noframe></body></h1></a></body></noscript></body></head></description></body></hx></a></a></div></center></em></strong></ol></ul></h1></h1></h2></h1></hx></a></keywords></description> <br clear="all" /> <div class="bookmark" data-url="http://yo-yaku.blog.so-net.ne.jp/2016-08-09" data-subject="検索にガンガンヒットするホームページの作り方―SEO(検索エンジン最適化)テクニックで効果的にPRしよう"></div> </div> <div class="posted"><span class="postDate">2016-08-09 16:48 </span> <a href="http://yo-yaku.blog.so-net.ne.jp/2016-08-09#favorite">nice!(0)</a>  <a href="http://yo-yaku.blog.so-net.ne.jp/2016-08-09#comments">コメント(0)</a>  <a href="http://yo-yaku.blog.so-net.ne.jp/2016-08-09#trackback">トラックバック(0)</a>  <br /><span class="postTheme">共通テーマ:</span><a href="http://blog.so-net.ne.jp/_contents/genre/0013/recent_articles/0001.html">本</a> </div> </div> <div class="articles-bottom"></div> <div class="articles-top"></div> <div class="articles"> <!-- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> <rdf:Description rdf:about="http://yo-yaku.blog.so-net.ne.jp/2016-04-01" dc:title="だれも書かなかったVisualBasicプログラミング入門" dc:identifier="http://yo-yaku.blog.so-net.ne.jp/2016-04-01" dc:description="Visual Studio.NET2003のVisualBasic(本書ではVB7と記述)の本。 著者は個人で開発をしたり講師などをしてきた方。実践的な教え方。.NETらしいプログラミングを教えたいとしていた。使いこなせば、プログラマを補助して生産性が高く、読みやすく、訂正がしやすい、ユーザーにやさしいアプリケーションを早く作ることができるという。 第1章入門編では、実際にプログラムを作りながら、基本的な操作を解説。 第2章はプログラミング最低限必要なことを説明。著者が開.." dc:creator="よよ" dc:subject="プログラミング" dc:date="2016-04-01T13:35:02+09:00" /> </rdf:RDF> --> <h2 class="articles-title"><a href="http://yo-yaku.blog.so-net.ne.jp/2016-04-01">だれも書かなかったVisualBasicプログラミング入門</a> <a href="http://yo-yaku.blog.so-net.ne.jp/archive/c2300515359-1">[プログラミング]</a></h2> <div class="articles-body"> Visual Studio.NET2003のVisualBasic(本書ではVB7と記述)の本。<br /> <br /> 著者は個人で開発をしたり講師などをしてきた方。実践的な教え方。.NETらしいプログラミングを教えたいとしていた。使いこなせば、プログラマを補助して生産性が高く、読みやすく、訂正がしやすい、ユーザーにやさしいアプリケーションを早く作ることができるという。<br /> <br /> 第1章入門編では、実際にプログラムを作りながら、基本的な操作を解説。<br /> 第2章はプログラミング最低限必要なことを説明。著者が開発したレクチャ用プログラムも使う。<br /> 第3章はコーディンうが楽しくなる操作の秘訣。VB7にはプログラマを助けてくれる機能がたくさんある。<br /> 第4章 クラスとオブジェクトの基礎的な概念とヘルプの読み方<br /> 第5章 クラスの作成と処理。クラスの多くの内容は別の書籍で。ここでは基本だけ。<br /> 第6章 データベース処理の初歩の基本、上と同じく別書籍で詳細を解説。<br /> 第7章 コントロールでは、4つのコントロールを解説。とくにテキストボックスの多彩な機能を紹介。<br /> <br /> 付録 すべてのコントロールを短い解説付きで紹介。アイコンの一覧紹介。ショートカットの紹介。<br /> <br /> 索引 用語と操作<br /> <br /> 第1章 Visual Basic.NET入門<br /> スタート画面では、ネットにつながっていると、新しい情報も表示してくれる。慣れてきたら便利に感じるはず。<br /> プロフィールで、慣れているキーボード配列やウィンドウレイアウトを選べる。ヘルプも今行っている操作にあわせて選べる。初心者はVisualBasicドキュメントにするのがよい。<br /> ソースコードの保管場所を「ツール」⇒「オプション」から設定。<br /> 変更を加えたところが自動的に保存されるように。上の同じオプションから「開いたドキュメントの変更の保存を確認」を選ぶ。<br /> <br /> 新しいプロジェクトをつくる。プロジェクトの種類⇒VisualBasicアプリケーション。テンプレート⇒Windowsテンプレート。ラベルやボタンを配置して、ボタンをおされたら文字列を表示する。Halloプロジェクトを作る。<br /> 実行させてみて、できているコードを確認。ソリューションの中にプロジェクトができる形になっている。<br /> <br /> テキストボックスに名前を入力すると、名前入りで文字列を表示してくれるアプリを作る。<br /> 開発環境の説明。著者が使いやすいと思う開発環境の設定。画面中央がドキュメントウィンドウ。右側の上に「ソリューションエクスプローラー」「ヘルプのキーワード」「ヘルプの検索」「ヘルプの目次」。下側に「プロパティウィンドウ」「ダイナミックヘルプ」「お気に入り」<br /> プロジェクトのファイルには、ディフォルトの名前を使わず、リーディングタグのついた名前に変更する。<br /> リーディングタグの例<br /> フォーム・・・frm<br /> クラス・・・cls<br /> モジュール・・・mod<br /> 作業中はダイナミックヘルプを表示しておくと作業中のヘルプの項目を表示してくる。<br /> コントロールを配置し、プロパティを設定する手順を解説。<br /> コードを書くときは、Meを使うと、そのクラスをさすことができる。そして「Me.」と打てば、後ろに選択できるメソッドがプルダウンで表示される。<br /> 変数の宣言の方法。これも開発環境が助けてくれる。<br /> 変数にもリーディングタグを。<br /> プログラムを実行する前に、「ソリューションエクスプローラー」からプロジェクトのプロパティを開き、スタートアップ設定の名前を、自分が付けた名前に変更する。そうしないとディフォルトが入っている。(Form1など)<br /> <br /> デジタル表示のアラーム時計を作る。<br /> デジタル時計の表示画面をつくる。<br /> Timerコントロールを配置する。1秒毎に起動するように設定。アラーム時計の表示画面が起動したら(frmClock_Load)タイマースタート。<br /> タイマーが起動したら、現在の時刻を表示画面に表示。<br /> 最小化されたら(Me.WindowState=FormWindowState.Minimaized)、そこ(Me.Text)に時刻を表示するようにする。(最小化されていなければ、表示画面に時刻を表示する)<br /> このとき、最小化してもとに戻したら、そのまま時刻が表示されてしまうのResizeイベントを使って、元の「アラーム時計」を表示するようにしておく。<br /> アラームの設定をするフォームを付け加える。一番上にチェックボックス。チェックがいれられたら時刻と分をNumeralUpBoxで、キャンセル、終了ボタンを配置。<br /> コード内には、アラームの設定あるなしのフラグ変数(BooLean)とアラームの時と分の変数(Integer)を設定。<br /> コードを書きながら開発環境がコードのインデントなどを自動であわせてくれることを体験。<br /> チェックボックスがクリック(CheckedChanges)されたら、設定ボタンがみえるようにするコード。時刻や分が変更されたら(ValueChanged)変数に設定するコード。<br /> フォーム間でデータをやり取りするにはPablicではなく、「Pablic ReadOnly Property」でGetを使う。こうすると変数の適用範囲が狭くなる。.NETらしいプログラムになる。<br /> 最初のアラーム画面がダブルクロックされたら、アラーム設定画面が表示されるようにする。Showを使うと、開いた画面の入力が終わるらなくても、元の画面の操作ができてしまうので、ダイアログボックスを使う(ShowDialog)。このとき、デバッガの「F5=実行」と「F8=1行実行」と、ブレークポイントの設定方法を解説。<br /> With構文で、くくるとイチイチ頭にオブジェクトを指定しないでよくなる。<br /> 最後に開いたダイアログボックスをDispose()。<br /> アラームを設定しているときは、時計の横に、アラームという文字と設定時刻が表示されるように設定。<br /> 最後に時刻になったらユーザーに時刻を表示する画面を作成。他のフォームから時刻を得るために、受け取り用の変数(mstrTime)を設定し、「WriteOnly」なプロパティ(pstrTime)を使う。このコード内で、受け取った時刻を受け取り用の変数にSetsる。(mstrTie = Value)。<br /> 最後にタイマーが起動したときのコードの最後に、設定した時刻になったら、アラーム通知の画面を開くようにする。このとき時刻をアラーム通知画面に渡す。(ユーザに時刻を表示する画面.pstrTime = mstrTime)<br /> <br /> アプリケーションの配布用のプログラムをつくる、デプロイメント機能。<br /> 単にアプリをインストールするバージョン<br /> ショートカットを作って、デスクトップに配置するバージョン<br /> 取扱説明書をつけて、プログラムメニューを作るバーションを作成。<br /> <br /> プログラムの中からエクセルを使う方法。<br /> 「ソリューションエクスプローラー」⇒「参照設定」右クリック、「参照の追加」⇒「COM」からExcelのObjectLibraryを選ぶ。入っているエクセルのバージョンによって名前が違う。<br /> フォームのコードの一番上の「Public Class Form1」のさらに上に、「Import Excel」をいれると以後「Exel.Application」と書かなくてよい。<br /> ここでは、ボタンを押すとエクセルに書き込めたという簡単な例をあげていた。それでもかなりコードは書く。<br /> 筆者は裏でエクセルを起動して表形式の複雑な書式を印刷させたり、ピボットを使った複雑な集計をやらせているそうである。<br /> <br /> VBプログラムから他のアプリケーションを起動する方法の本道はProcessクラスだか、初心者用に「Shell」関数で例をあげていた。Try...End Try構文を使っていたが、解説はあとで。例ではメモ帳を立ち上げて、SendKeysで文字列を表示させるもの。<br /> <br /> <br /> <br /> 第2章 プログラミングの基礎技術<br /> スタートページの便利な機能。プロジェクトタブでは最近開発したプロジェクト(ソリューション)の名前と最後の更新日時一覧が見れる。オンラインリソースでは、たくさんのサンプルコードがみれるので、これを見るだけでも勉強になる。キーワード検索もできる。マイプロフィールでは開発環境の働きを自分の使用する言語や環境に合わせて最適化できる。<br /> <br /> 新しいプロジェクトダイアログボックスの中を散歩するとVisualStudio2003で何ができるか理解できる。<br /> <br /> 変数の使い方。データ型一覧、宣言の仕方。変数への代入方法。定数の宣言方法と使い方。プログラムの中で決まった値を使うときは定数として宣言して値をいれておくとわかりやすい。<br /> <br /> 制御構造と演算子の説明。条件式、文字列のパターンの一致、算術演算子、代入演算子、論理演算子、ビットシフト演算子、その他の演算子。演算子の優先順位。条件判断構造。繰り返し構造。<br /> <br /> プロシージャの説明。種類(Sub、Function、イベントハンドラ、Property)、宣言。引数。<br /> プロシージャを作成してみる。引数なし⇒引数あり⇒値渡しと参照渡し⇒位置と名前による引数渡し、引数の省略、不特定<br /> 戻り値のあるプロシージャの例<br /> オーバーロードで三角形の面積を計算するのに二つの方法がある場合の例で説明。<br /> <br /> 命名規則。<br /> 接頭辞+タグ+基本名+修飾子+接尾辞<br /> m + lng + RecNum + Max⇒mlngRecNumMax<br /> それぞれの例。<br /> 基本名のつけ方。プログラムの中での働きを明確に理解できるように記述。長くなっても「Ctrl+Space」で一覧から呼び出す習慣をつければ打鍵数も抑えられ、スペルミスもなくなる。<br /> 要素を並べるときは、「オブジェクト名+動作」 例 FormProAdd これは×AddFormProp<br /> メニューの名前は構造にあわせてつける。 例 mnuFile,mnuEdit<br /> 名前の関連性、データベースの処理で「Price]というフィールドがあったら、列名=clmPrice, 変数名=lngPrice,表示のタイトル=StrPrice,表示する場所=txtPrice、場所のタイトル=lblPrice<br /> コーディングも楽だし、読みやすいコードになる。<br /> 漢字は使わない。略語は規則にこだわらずわかりやすいほうがよいだろう。<br /> <br /> プログラム要素の宣言と有効範囲。<br /> 名前の付け方。大文字と小文字は区別されないなど。<br /> 要素の特性。データ型、有効期間、スコープ、アクセシビリティ。<br /> プログラミング要素は宣言した領域で使える、上位の領域で宣言してあれば、下位の領域で使える。下位の領域からブロック、プロシージャ、モジュール、名前空間。Paplicはほかのプロジェクトからも使えるのでグローバルという呼び方もある。<br /> 有効期間。モジュールのレベルで宣言された変数⇒アプリケーションの実行時間全体。クラスまたは構造体⇒インスタンスごとにコピーとして存在、インスタンスと同じ有効期間。プロシージャ⇒宣言されたプロシージャが実行されている間だけ。Staticで宣言した変数はプロシージャが終了しても破棄されず値を保持する。<br /> 変数の初期化の値。数値変数なら0、日付なら西暦1年1月1日午前0時など。<br /> スコープは領域のレベルとアクセシビリティできまる。<br /> Public=同じプロジェクト内からも、そのプロジェクトを参照している他のプロジェクトからも、そのプロジェクトからビルドされたアセンブリからもアクセスできる。グローバルとも呼ぶ。<br /> Protected=同じクラス、または派生クラス。<br /> Friend=同じプロジェクトからはアクセスできるが、外からはアクセスできない、通常はグローバルと考える変数はFreindで宣言し、Pablicと使い分けよう。<br /> Protected Friend=派生クラス、同じプロジェクト、またはその両方からアクセスできる<br /> Private=同じモジュール、クラス、または構造体だけからアクセスできる。<br /> Dimだけで宣言した変数はPrivateになるが、明示的に記述した方がいい。<br /> <br /> エラー処理。<br /> Try...Catch...End Tryの説明。<br /> When と Finallyの説明。<br /> <br /> フォーカスイベント<br /> フォーカスイベントの発生順序。Enter⇒GotFocus⇒Leave⇒Validating⇒Validated⇒LostFocus<br /> これを検証するプログラムで発生の順番を確認。Validatingのバグを指摘していた。回避方法も。VS2005ではなおっているらしい。<br /> フォーカスイベントでも検証プログラムを使って、LoustFocus、GotFoucusはうまく動いていないことを指摘していた。なるべく使わないほうがいいそうだ。<br /> Debug.WriteLineを利用すると予期しないイベントの発生によるバグやパフォーマンス低下を発見しやすい。<br /> <br /> データ型と型変換。宣言の方法。データ型の説明。チュートリアルプログラムを使って型変換を実際に値を使ってやってみる。<br /> Option StrictスイッチをOnにして使うと暗黙の型変換ができなくなる。<br /> 型変換の機能と実験をチュートリアルで説明。<br /> <br /> 数値演算についてはOption Strict Onの場合例外が発生しやすい。実験で解説。<br /> <br /> 文字列の処理。チュートリアルプログラムで説明。+とか&とかTrimの説明。<br /> charの説明。<br /> <br /> 日付時刻処理もチュートリアルで説明。DateTime型とTimeSpan型。Date型。<br /> <br /> 数値の書式指定。日付・時刻の初期式。チュートリアルで説明。<br /> <br /> 配列の使い方。一次元配列と多次元配列。最大32次元まで指定できる。添え字は0から連続番号。配列のサイズは固定されていない。無駄に大きな次元の配列をつくるとメモリの浪費。オブジェクト型の配列では複数の要素をもてるがバグになりやすいので注意。配列の初期化方法。代入。<br /> Arrayクラスの解説。コピーしたり並べ替えたり、検索したりの例。<br /> <br /> 列挙型の使い方。曜日の列挙型の例。Enumクラス解説。<br /> <br /> 構造体。宣言、メンバのアクセシビリティ、配列、初期化、プロシージャ、変数の宣言、アクセス、構造体の代入、クラスと構造体。<br /> <br /> イベントとハンドラ。<br /> VB6のイベントプロシージャとVB7のイベントハンドラでの異なる動きを例で解説。<br /> 複数のオブジェクトで動作するハンドラの例。一つのイベントに対して複数のハンドラの例。<br /> <br /> コードが動かなかった時(デバッグ)<br /> デバッグ環境の確認。「ツール」⇒「オプション」デバッグ全般で、「起動時にシンボルが見つからないときに警告」「Intellisenseを使用して、ブレークポイントを確認」「プロパティ評価を変数ウィンドウで行う」をチェック。<br /> 青い破線は文法の誤り。ビルド時のエラー、「F5」で実行時のエラー。<br /> 論理的なミスで予想と外れた動きをしているときの原因を探すのが本来のデバッグ。Traceクラスを使う方法を解説。<br /> ブレークポイントの設定、中断モード解説。<br /> <br /> <br /> 第3章 コーディングが楽しくなる操作の秘訣<br /> IDE(統合開発環境)の概略。画面を水平に分割する方法。ツールウィンドウの表示。ドッキングのコツ(一度壊れると戻しにくい)。<br /> <br /> ツールウィンドウの内容。Windowsフォーム、クリップボードリング(クリップボードの内容を表示してくれる)、ソリューションエクスプローラ、プロパティウィンドウ、クラスビュー。ヘルプの目次。ヘルプのキーワード検索、ヘルプの検索、ダイナミックヘルプ。ヘルプは困ったとき開くだけでなく、系統的な勉強にも使える。一度みたトピックをお気に入りに追加できる。<br /> <br /> いろいろなツール<br /> VB6のイミディエイトウィンドウはコマンドウィンドウに統合。<br /> オブジェクトブラウザはF2で気道。<br /> コントロールをグリッドに合わせて整列させる方法。サイズを統一する方法。デザインを固定する方法(プロパティからLockedをTrueにする)。<br /> プロジェクトの終了は「AltQ」<br /> <br /> 楽々コーディング<br /> クラス名を打ってドットを打つと、そのクラスのプロパティやメソッドの一覧がでるのが自動メンバ表示。ここでTなどをうつくTextなどが自動で検索される。間違って入力したら「BackSpace」や「Delete」キーが使える。<br /> 見つかった名前をエディタ上に呼び出す方法は、Tab、Enter、Space,「=」「,」など文法的に意味のあるキーを押すなど。<br /> 名前にリーディングをタグをつけておけば、頭の部分を打って、「Ctrl+Space」で入力候補が呼び出せる。<br /> パラメータヒントもでてくるので引数も説明を読みながら入力できて便利。この機能が使えないときは「ツール」⇒「オプション」 「テキストエディタ」⇒「Basic」⇒「全般」で自動メンバ表示、パラメータヒント、をチェック。「右端で折り返す」もチェックしておくと便利。<br /> <br /> コードエディタの便利な機能<br /> ウィンドウの分割<br /> 名前の定義を表示。「Shift+F2」で定義にジャンプ。元に戻りたいときは「Ctrl+Shift+F2」<br /> 折り返しは「右端で折り返す」にチェックがはいっていれば自動で「_」が入る。<br /> ブックマークのつけ方。<br /> コメントにする。「Ctrl+K」,C  元に戻す。「Ctrl+K」,U<br /> 任意の長方形を選択するには、「Alt」キーを押しながらマウスでドラッグ。キーボードなら「Alt+Shift」を押しながら矢印キーを押す。<br /> <br /> アウトライン機能。「Windowsフォームデザイナで生成されたコード」などのように四角で囲まれた文字列を「+」ボタンをクリックすると定義が現れる。これがアウトライン機能。<br /> #Region "<説明文>"・・・#End Region で囲んだ部分を折りたたんで非表示にできる。<br /> 一括おりたたみは、コードエディタの何も書いてないところで右クリックして「定義に縮小」。<br /> 検索のときには「非表示のテキスト検索」をチェックしておくと折りたたんだ部分も検索してくれる。<br /> 「+」で展開「-」で折り畳みだが、「Ctrl」を押しながら「M」を2度うちするとトグルになって開いたり閉じたりする。<br /> <br /> 検索と置換。ショートカットキー。検索、置換ダイアログボックスの詳細説明。<br /> インクリメンタル検索。一文字入力するたびに検索してくれるので、長い名前を検索するときに便利。折りたたんだところは探さないので注意。<br /> ファイル内検索で検索する対象を選ぶ。<br /> <br /> <br /> 第4章 クラスとオブジェクトを理解する<br /> オブジェクトはモノ。プログラミングの世界ではオブジェクトと対照的な言葉は「手続き」、従来の手続き指向プログラミングでは「処理」と「データ」は別なので、データ処理のミスがシステム全体に影響する。データを中心として「手続き」をその回りに配置して一つのパックとする考え方がうまれた、それがオブジェクト指向プログラミング。<br /> <br /> オブジェクトの内容。<br /> 特徴がプロパティ。色や大きさなど<br /> 操作がメソッド。電源をONするなど。<br /> 操作や動きがあったときイベントが発生したして、対応するイベンドハンドラを用意。<br /> メソッド、プロパティ、イベントをオブジェクトのメンバーという。<br /> オブジェクトは機能(メソッド)とデータ(プロパティ)が一体化したものと考える。これをカプセル化という。<br /> そして金型にあたるのがクラス、クラスからものを作るのをインスタンス化するという。できたオブジェクトは製品にあたる。<br /> <br /> クラスの定義と継承<br /> 従業員の例で説明。現実の世界からどのような要素を取り出すかを「抽象化」という。<br /> Newでクラスのインスタンス、つまりオブジェクトをつくる。<br /> 継承を天と線のクラスで説明。(Inherits Point)<br /> フォームにコントロールを配置するのは実は、クラスのインスタンスを作っていることをコードから説明。<br /> Excelのオブジェクト構造を使って階層構造を説明。Worksheetを一度に処理したいときは、「Worksheets」=コレクションを使う。<br /> ・「オブジェクト」とは処理とデータを一つにまとめてカプセル化したもの<br /> ・「オブジェクト」は「プロパティ」と「メソッド」と「イベント」をもっている<br /> ・「オブジェクト」は「クラス」で定義する<br /> ・「クラス」の「インスタンス」が「オブジェクト」である<br /> ・「クラス」は「継承することができる<br /> ・「オブジェクト」は階層構造をもっている。<br /> <br /> 名前空間と参照設定<br /> 「.NET Framework」の提供するライブラリはすべてクラス。<br /> 名前空間はクラスをカテゴリー別に階層的に分類するのに使う。<br /> 先に名前空間を指定しておいてから、Textboxなどどして使う。そうでないと、Windowアプリケーションのテキストボックスや、Webアプリケーションのテキストボックスなどがあるのでわからない。<br /> Importsステートメントで指定。<br /> 実際のプログラムでどんな名前空間がインポートされているか、プロパティウィンドウで確認していた。<br /> <br /> クラスに関するヘルプ。<br /> ヘルプの読み方を説明しながら、.NET FrameWorkの提供するクラスの利用の仕方を説明。<br /> ヘルプのインデックスの検索する文字列に「system.object」=クラスの祖先をいれて、そこから説明していた。<br /> クラスのメンバ。オーバーロード(引数で区別する同じ名前のメソッド)、オーバーライド(継承したメソッドやプロパティを拡張したり変更したりする)の説明。<br /> Sharedがついてプログラミング要素は、特定のインスタンスに関連付けられることなく、自由に使える。(詳しくは5章)<br /> <br /> <br /> 第5章 クラスを作ってみる<br /> 人を表す「Human」クラスをつくり、姓、名、生年月日、性別をもつようにする。属性をプロパティプロシージャで作成。宣言しただけで自動でコードを作成してくれる。<br /> ここに外からプロパティを設定するためにコードを書く。ここでテスト。属性をいれて設定する、取得する、終了する、クリアするボタンを配置して処理を書く。<br /> クラスの中で、姓と名を合体させて表示させるコード、年齢を計算するコードを書いて、フォームに表示させる。<br /> 日付にならない入力がエラーになるの、これを「Validating」イベントハンドラで処理する。Try...Catch...End Try<br /> 姓名に長いデータがはいってしまうと、保存などに問題がおきることがある。クラスでチェックしtはじくようにして使えば、プログラム全体を通してデータを使っても安全。チェックのイベントをつくる。イベントを発生させる部分を書く。実際にイベントを発生させて「F8」でおいかけてみる。<br /> <br /> システム全体で有効な定数や変数は標準モジュールを使うが、同じことがSHあrdでもできる。年度情報をSharedで宣言する例で解説。著者はこれで標準モジュールをほとんど使わなくなった。<br /> <br /> コレクションとは。<br /> 先ほどの人クラスでは一人しかつくっていないが、今度はコレクションにする。<br /> コレクションのなかでもSortedListをとりあげて解説。<br /> フォームも改造して、人を追加したり検索したりできるようにする。対応するコードの書き方と動作の解説。<br /> 解説用なのでユーザインターフェースはよくないそうだ。<br /> <br /> 便利な継承。<br /> 「人」のクラスから「従業員」のクラスを作る例。<br /> 「人<br /> クラスをクラスライブラリで作成して、継承して利用する。人クラスはどこにあってもよい。<br /> <br /> <br /> 第6章 データベース処理の初歩<br /> ADO.NETのごく簡単な利用法を紹介。MicrosoftAccessの「.mdb」を使う。<br /> 新しいプロジェクトから、VisualBasicプロジェクトのWindowsアプリケーションをつくり、フォームを開いて、「データフォームウィザード」を利用して「.mdb」に接続する。このウィザードにそっていくだけで、Accessの内容を表示するフォームが簡単につくれる。<br /> <br /> データをグリッドに表示するプログラムを作りながら、データベースの処理手順を解説。<br /> SQLを使って、DataSetを生成するプログラムが1行もコードをかかずにできてしまう。しかし名前は自分で変更しておいたほうが、のちのち役に立つ。<br /> ADO.NETの概要として、データソースとの接続はOleDBConnection、データ処理のコマンドは、OleDBAdapter の Select Insert Update Delete、取得したデータはDatasetとまとまっていた。<br /> ADOとの大きな違いは、動作中に継続的に接続を維持する必要がなく、データソースの内容を読み込む際と変更を加える際だけ接続を行い、読み込みや書き込みが終わると接続を自動的に切ること。<br /> よみとったデータをグリッドに表示するコードを書く。<br /> <br /> データベースの管理はテキストボックスを中心に、データの新規入力、消去、編集を行う。プロジェクトを作成して説明。<br /> プログラムを作成する際に<br /> 「使いやすく、誤操作の心配のないユーザインターフェース」<br /> 「膨大な取り扱い説明書の要らないプログラム」<br /> 「訂正が簡単で読みやすいコーディング」<br /> を考慮した、本格的プログラミングについて解説。<br /> 前につくったものを借用して名前を変える。フォームを改造してデータを表示。<br /> 移動ボタンで前後のデータを表示。<br /> Windowフォームにデータソースの内容を表示し、データソースの処理を行うための最も簡単な方法は、連結コントロール。これには単純データ連結と、複合連結がある。<br /> Windowフォームにはデータソースごとに「CurrencyManeger」というオブジェクトがあってデータソースの場所を追跡して監視。これは複数の連結コントロールがあっても一つだけ。<br /> ADO.NETにはカレントレコードという概念はない。「CurrencyManeger」の「Posion」プロパティが現在位置を差す。複数のデータソースがあるとき「CurrencyManeger」が複数あり、「BindingContext:オブジェクトが管理する。<br /> これらを利用して表示している行を移動するたびに表示がかわる部分のイベントを作成。<br /> データの入力・訂正・削除のボタンをつくる。そして立ち上がったときは訂正などの処理ができない「ブラウズモード」にする。<br /> 新規作成の部分を作成。データのチェックをする。キャンセル、更新確認ボタンのコードを書く。新規入力のテスト。<br /> 連続入力ボタンをつくる。現在の入力を終えて、新しいインスタンスをつくるだけ(AddNew)こうするとValidationの問題でうまくいかない(フォーカスの問題。実際に動かすとわかる)そこで、Tabでフォーカスを動かすようにコードを書く回避策を解説。<br /> 「削除」ボタンの機能を書く。<br /> 「訂正」ボタンの機能を書く。訂正モードのとき重複チェックでうまくうごかないのを回避する方法を解説。<br /> 「保存」ボタンでデータベースに変更を加える。<br /> 「もとに戻す」ボタンで、データセットの「RejectChange」を使って変更を破棄する。<br /> 日付の表示の難しさについて解説。<br /> <br /> データ処理のコードよりユーザインターフェースやエラートラップのコードのほうが多い<br /> 。コンピュータを導入した時、最も費用のかかるのが入力やデータのメンテのための人件費。こうしたユーザに親切なプログラムが人件費節約に役立つが、多くのクライアントは評価してくれないと書いてあった。<br /> <br /> <br /> 第7章 コントロール<br /> MessageBoxを使う。ヘルプの解説でShowの下に青いアンダーラインがあるのでここをクリックして参照をよむと詳細な使い方がわかる。<br /> <br /> ラベルの使い方と「Anchor」プロパティ。Lockedで位置や大きさが変えられなくなる。Anchorでフォームの上、右、左、どちらかからの固定位置を指定できる。ラベルの形状を変えられる。文字列が長くなった時折り返して全体を表示するか指定できる。<br /> 選択されたテキストボックスなどにあわせて表示を変更するラベルの例。<br /> 画像の扱い方。直線をラベルで扱う方法。<br /> VB7のラベルはなかなか奥が深い。<br /> <br /> テキストボックスの使い方。外観、文字列の内容と長さ、フォントとIME、操作の制限、元に戻す。複数行のテキストボックスと配列に取り込む方法。文字列の選択。<br /> Appendメソッド<br /> HideSelectionプロパティでフォーカスを失ってもテキストボックスの選択部分の反転がきえない。<br /> <br /> データグリッドのデザインの外観を美しくする。<br /> コレクションエディタのプロパティを使った例。<br /> <br /> メニューの作り方。<br /> メニューエディタはない。自分でフォームからメニューをつくる方法を解説。<br /> ショートカットキーやイベントハンドラなど。<br /> <br /> 付録<br /> 1ショートカットキー<br /> グローバルショートカットキー<br /> ソリューション関係<br /> テキストエディタのショートカットキー/移動<br /> テキストエディタのショートカットキー/選択<br /> テキストエディタのショートカットキー/コードエディタ<br /> 検索と置換のショートカットキー<br /> デバッグのショートカットキー<br /> フォームデザイナのショートカットキー<br /> <br /> 2オブジェクトアイコン一覧<br /> <br /> 3Windowsフォームコントロールの機能別一覧<br /> テキストの編集 TextBox RichTextBox<br /> データの表示(読み取り専用) Label LinkLabel StatusBar Notifylcon ProgressBar<br /> などという風に分類していた。<br /> <br /> <!-- amazon --><br /> <div class="sonet-asin-area"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774123897/aaaaaaaaaaam-22/ref=nosim" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51ZX29ZX2PL._SL160_.jpg" class="sonet-asin-image" alt="だれも書かなかったVisualBasicプログラミング入門" title="だれも書かなかったVisualBasicプログラミング入門"></a><div class="sonet-asin-info"><p class="sonet-asin-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774123897/aaaaaaaaaaam-22/ref=nosim" target="_blank">だれも書かなかったVisualBasicプログラミング入門</a></p><ul><li class="sonet-asin-label">作者: 西田 雅昭</li><li class="sonet-asin-label">出版社/メーカー: 技術評論社</li><li class="sonet-asin-label">発売日: 2005/06/01</li><li class="sonet-asin-label">メディア: 大型本</li></ul></div></div><div class="sonet-asin-break"></div><br /> <!--/ amazon --><br /> <br clear="all" /> <div class="tag-word">タグ:<a href="http://yo-yaku.blog.so-net.ne.jp/tag/%E8%A5%BF%E7%94%B0%20%E9%9B%85%E6%98%AD" rel="nofollow">西田 雅昭</a> </div> <div class="bookmark" data-url="http://yo-yaku.blog.so-net.ne.jp/2016-04-01" data-subject="だれも書かなかったVisualBasicプログラミング入門"></div> </div> <div class="posted"><span class="postDate">2016-04-01 13:35 </span> <a href="http://yo-yaku.blog.so-net.ne.jp/2016-04-01#favorite">nice!(0)</a>  <a href="http://yo-yaku.blog.so-net.ne.jp/2016-04-01#comments">コメント(0)</a>  <a href="http://yo-yaku.blog.so-net.ne.jp/2016-04-01#trackback">トラックバック(0)</a>  <br /><span class="postTheme">共通テーマ:</span><a href="http://blog.so-net.ne.jp/_contents/genre/0013/recent_articles/0001.html">本</a> </div> </div> <div class="articles-bottom"></div> <div class="articles-top"></div> <div class="articles"> <!-- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> <rdf:Description rdf:about="http://yo-yaku.blog.so-net.ne.jp/2014-10-17" dc:title="体系的に学ぶコンピュータ言語" dc:identifier="http://yo-yaku.blog.so-net.ne.jp/2014-10-17" dc:description="2004年に刊行されたコンピュータ言語の進化をまとめた本。 第1章コンピュータ言語の歴史と概要 2001年をすぎてもHAL9000のような知能をもったコンピュータは夢物語。 コンピュータはプログラムという手順書に記述された内容の通りに動作することしかできない単純な機械のまま。 しかし、人間とコンピュータとの隔たりをなくすために、コンピュータ言語が開発され研究されてきている。 コンピュータ言語は人間がコンピュータに指示をあたえるためのもの。 あいまいさは一切ない。 コンピュ.." dc:creator="よよ" dc:subject="プログラミング" dc:date="2014-10-17T12:57:45+09:00" /> </rdf:RDF> --> <h2 class="articles-title"><a href="http://yo-yaku.blog.so-net.ne.jp/2014-10-17">体系的に学ぶコンピュータ言語</a> <a href="http://yo-yaku.blog.so-net.ne.jp/archive/c2300515359-1">[プログラミング]</a></h2> <div class="articles-body"> 2004年に刊行されたコンピュータ言語の進化をまとめた本。<br /> <br /> 第1章コンピュータ言語の歴史と概要<br /> 2001年をすぎてもHAL9000のような知能をもったコンピュータは夢物語。<br /> コンピュータはプログラムという手順書に記述された内容の通りに動作することしかできない単純な機械のまま。<br /> しかし、人間とコンピュータとの隔たりをなくすために、コンピュータ言語が開発され研究されてきている。<br /> <br /> コンピュータ言語は人間がコンピュータに指示をあたえるためのもの。<br /> あいまいさは一切ない。<br /> コンピュータが理解できるのは機械語(マシン語)だけなので、<br /> それ以外ならコンピュータ内の翻訳機を使う。<br /> 多彩なアプリがでてくるとコンピュータを操作するのはプログラミング言語だけではなくなってくる。<br /> 代表的なものは、Officeアプリケーションで使うマクロ言語、リレーショナルDBで使うSQLなど。<br /> <br /> 「完璧なコンピュータ言語」は存在していない。<br /> 現在のコンピュータ言語には万能なものがなく、用途に応じてつかうようにしている。<br /> ハードやソフトの進化、社会情勢にあわせて言語が設計されてきた。<br /> これまでの研究目的や課題<br /> ・もっとプログラミングが楽にならないか<br /> ・複雑な科学技術計算を数式で記述できないか<br /> ・後から見てもわかりやすいプログラムにできないか<br /> ・もっと高速に動作するプログラムにならないか<br /> ・論理記述をわかりやすく記述できる方法はないか<br /> ・他のコンピュータへ簡単に移植できないか<br /> ・初心者でも理解できるようなコンピュータ言語は作れないか<br /> ・プログラミングの教育用として適した言語はないか<br /> ・複数のプログラマにおけるチーム開発で、もっと開発効率を向上できないか<br /> ・GUIの画面設計をビジュアルにできないか<br /> ・データを簡単かつ確実に扱う構造を用意できないか<br /> <br /> 最初のコンピュータは一般的にはペンシルバニア大学「ENIAC」といわれている。<br /> 真空管とリレー、定航コンデンサ、スイッチ、ネオン管などでつくられた2.5×0.9×24の大きさ。<br /> 昔はその用途が弾道計算や暗号解読だったので、存在自体があまりあきらかにされなかった。<br /> 実際には「ENIAC」よりアイオワ州立大学の「ABC」がはやかったといわれている。<br /> 真空管をつかっており、メモリとしてコンデンサを設置したドラムをモーターで回転させていた。大きさは机程度。<br /> <br /> 「ENIAC」は敗戦でプログラミングしていた。<br /> ノイマンが提唱するメモリにプログラムを内蔵するノイマン型コンピュータが開発され主流になっていく。<br /> これがハードウェアからソフトウェアが分離するきっかけになった。<br /> 「EDVAC]はプログラムをメモリに搭載するようになったが、<br /> 後継の「EDSAC」が世界初のノイマン型コンピュータといわれている。<br /> ノイマンは現在コンピュータの父といわれている。<br /> <br /> コラムにパスカルの歯車式計算機が紹介されていた。<br /> <br /> アラン・M・チューリングが開発して、暗号解読に活躍した「Colossus」は<br /> プログラムが本体にくみこまれており、一部がプラグの差し替えで変更できるようになっていた。<br /> <br /> 「Baby」は、マンチェスター大学で開発され、Colossusの延長線上で開発された、<br /> ウィリアムス管と名付けられた新しいメモリシステムで当時としては比較にならないくらい早いメモリアクセスを実現。<br /> プログラムもメモリの中にとりこめるようになっており、現在のコンピュータに近い。<br /> 大きさは部屋いっぱいのビッグサイズだった。<br /> <br /> コンピュータとコンピュータ言語の歴史が表になっていた。<br /> 1940年代→コンピュータの黎明期<br />  軍事目的主体。アーキテクチャを模索中。プログラミンは物理配線などハードウェアに密接している。<br />  言語は機械語のみ<br /> 1950年代から60年代→大型コンピュータの時代<br />  時代を明確にきるのは困難。科学技術計算用にFORTRAN、事務用にCOBOLが使われた。<br />  コンパイラの研究が盛んになる。<br /> 1970年代→パーソナルコンピュータの創世期<br />  LSIの登場で数多くの部品を集積することが可能になり、コンピュータが小型化。<br />  パソコンの原形ができる。マイクロソフトのBASICが多くのコンピュータに搭載され標準OSとしても利用される。<br /> 1980年代→標準化OSの時代<br />  パーソナルコンピュータが多くのメーカーから発売され、計算だけでなくワープロや表計算ソフトらのアプリがのり、<br />  企業が導入するようになる。<br />  ソフトウェア資産の効率利用が考えられるようになる。<br />  標準OS、CP/MやMS-DOS,UNIXなどの登場。<br />  IBMのパーソナルコンピュータの標準機 PC/AT互換機で動作するソフトを標準ソフトとして売る動き。<br />  アーキテクチャからアプリケーション中心にシフト。<br />  プログラマがさまざまなコンピュータ言語を選択可能になる。<br />  C言語のようなポピュラーな言語は各ソフト会社から機能の異なるものが発売される。<br />  開発環境として発達して、のちのGUIで画面デザインできる統合開発環境ができる。<br /> 1990年代後半~→インターネットの時代<br />  クライアントコンピュータに仕様を満たすWebブラウザがあれば、プログラムやサービスはインターネットから供給できるようになった。これまでとは異なる実行形態。<br />  インターネットを利用したクライアント/サーバ型分散システムでは、速度が要求されるインターフェースをクライアントが担当。サーバで処理の重いデータを処理し、入力受付、計算、データ配信をするだけになった。このことから簡易的コンピュータ言語「スクリプト言語」が幅広く利用されることになる。<br />  Webページの生成用の、PHPやVBScriptなどもうまれてきた。<br /> <br /> パーソナルコンピュータの性能向上により、ついに余剰スペックが生まれる時代になった。<br /> Javaha仮想マシン上で動作するコンピュータ言語は、こうした余剰スペックによって利用可能になったのである。<br /> <br /> コンピュータ言語は様々あるが、コンピュータは機械語(マシン語)しかわからない。<br /> どのコンピュータ言語で書かれたプログラムも最終的には機械語の命令に翻訳される。<br /> 機械語プラグラムは、人間にとって16進数で記述された記号の集まりにしかならない。<br /> 機械語の仕様はCPUによって異なる。<br /> Z80 → NEDPC-8001など<br /> 8086→PC9801 、Pentiumの源流<br /> PowerPC→Macintosh<br /> 同じ系列のCPUでもレジスタや命令が増えているなどの違いがあったりする。<br /> 機械語を簡単に記述するために「ニーモニック」という記述方法を使用することがある。<br /> これをコンピュータで機械語に変換するソフトを「アセンブラ」という。<br /> アセンブラは機械語に1対1で変換可能なコンピュータ言語。<br /> プログラマはCPUの命令表から解放された。<br /> 機械語では命令の追加で移動先のアドレスが変わるたびに、<br /> それぞれの移動先のアドレスを変更する必要があったが、<br /> ラベルが使えるようになって効率がよくなった。<br /> アセンブラの種類によっては、定数を指定できる、変数や構造体を宣言できる、<br /> 条件判断や反復処理を記述するなど、プログラミングを補助する機能が装備されていた。<br /> <br /> アセンブラの問題<br /> ・データ型をもつ変数を使用できない。<br /> ・計算式をアセンブラに翻訳した形で記述しなければならない→「x=a*x+b」は記述できない<br /> ・プログラム制御の流れがわかりにくい。<br /> 「コンパイラ」は、より人間に理解しやすい形でかかれたプログラムのソースコードを機械語に変換する。<br /> (現在のコンパイラは違う)<br /> 当時のコンピュータの利用方法は数値解析が主力だったので、<br /> 人間が理解しやすい形で、プログラム中に数式を記述したいというニーズが高かった。<br /> 1956年にIBMが開発した世界初の高級言語「FORTRAN]はこのニーズに答えたもの<br /> 計算を<変数>=<式>と表現できた。<br /> 可読性があがり、制御の流れもだいぶ理解しやすくなった。<br /> もうひとつのニーズ、コンピュータに依存しないプログラムを記述したい、も<br /> 高級言語とコンパイラの開発を後押しした。<br /> ターゲットのマシンに合わせたコンパイルをすることで、<br /> 一つのソースコードで異なるコンピュータで動作するようになることが期待された。<br /> <br /> 高性能なコンピュータが安価に入手できるようになったのは、1980年代後半からで、<br /> それまではコンピュータの価格はプログラマの人件費よりずっと高かった。<br /> そこで、処理時間が短く、コンピュータに負荷をかけないプログラミング技術が要求された。<br /> コンピュータの性能があがると、コンピュータのとユーザの対話的な処理に、CPUの利用時間を割り当てられるようになった。<br /> 「インタプリタ」は、基本的に実行中にプログラムを1行ずつ解釈して実行する。<br /> 「コンパイラ」より速度は遅いが、プログラマが実行ファイルを作成すると意識しなくてもいい、<br /> ソースコードと実行ファイルが同じで管理しやすいという利点がある。<br /> 代表はBASIC、現在のVisualBasicはインタプリタではなくコンパイラで動作する。<br /> <br /> GUI・・・Grahical User Interface<br /> 現在のWindowsやMAC OSに搭載されているインターフェイス<br /> プログラムやドキュメントを管理するウィンドウ、イメージで表現するアイコン、<br /> 画面上のオブジェクトを直接指定できるマウスなどで構成される。<br /> こうした見た目の良さや直感的な操作の為にコンピュータの資源を割り当てられるのは<br /> コンピュータが高速化したため。<br /> GUIの登場で処理単位の開発→画面単位の開発に推移<br /> 多くのコンピュータ言語がフォームを作成するデザイン機能を搭載するようになった。<br /> <br /> 1970-1980年代にコンピュータ言語を表す際に高級言語と低級言語という表現が使われた。<br /> 人間に近いのを高級言語、コンピュータに近いのを低級言語という。<br /> 当時コンピュータの資源は限られていたので、高級言語は資源を多く必要とするため<br /> コンピュータの資源をあまり使わず、能力を最大に引き出す低級言語もよく使われた。<br /> しかし、コンピュータが安価になると、人間の資源を節約するほうが効率的になり、<br /> 高級言語で人間にわかりやすくプログラムを記述されるほうが重視されるようになった。<br /> <br /> チューリング・テスト・・・コンピュータの父とよばれるアラン・M・チューリングが考えたテストで、人間の前に2つのディスプレイをおき、一方は人間が応答、一方はコンピュータが応答する、ディスプレイの前の人間が、ちがいがわからなければコンピュータが知性をもったとすることができるというもの。<br /> <br /> 人工知能の研究用に開発されたのがLISPとProlog<br /> LISPは1958年にMITのジョン・マッカーシーが開発。<br /> 開発時期自体はFORTRANやCOBOLと変わらない。<br /> <br /> ハードウェアが進化すると、ソフトウェアの有用性が社会的に認められ、利用範囲が拡大してきた。<br /> ソフトウェアの機能は増え、プログラムやサイズが大きくなっていった。<br /> 複数のプログラマが共同で作業することも多くなり、大規模なプログラムを効率よく、間違いなく<br /> 開発することが求められるようになってきた。<br /> 1960年代末にエドガー・ダイクストラが『構造化プログラミング」を提唱。<br /> それまで多用されていたgoto文を使わず、入り口と出口が一つのプログラムなら、順接(successive)、<br /> 分岐(conditional)、反復(repetition)で記述できると提案した。<br /> 初めて構造化プログラミングを導入したALGOL60の設計にもかかわった。<br /> 現在のほとんどのプログラミング言語に構造化の概念と命令がくみこまれている。<br /> それまで必須だったフローチャートよりも、きれいに整備されたソースコードを読む方がわかりやすくなった。<br /> ただし、goto文を使ったほうがわかりやすくなる場合もあると今日ではいわれていて、<br /> その機能を持つ命令として、break文やcontinue文を実装しているプログラミング言語が多い。<br /> <br /> 1980年代、コンピュータの利用目的が、数値計算から蓄積されたデータの処理に移行する。<br /> そこで「オブジェクト指向」という概念が登場する。<br /> 多くの研究者が様々な手法を発表しているが、共通するのは、データとデータに対する処理をひとまとまりにすること。<br /> JavaやC++が有名なオブジェクト指向言語。<br /> オブジェクト指向では、データの構造を変更しても、参照や変更がひとまとめになっていて修正しやすい。<br /> そして、プログラマは本質的な部分に集中できることになる。<br /> このような考え方はめずらしくなく、優秀なプログラマはどの言語を使っても、ある程度オブジェクト指向の概念を取り入れているものである。<br /> 現在の一般的なオブジェクト指向言語では、オブジェクトを「クラス」で定義、属性を「プロパティ」、処理を「メソッド」と呼び、クラスから「インスタンス」と呼ばれるオブジェクトを生成して操作する。<br /> <br /> GUIでプログラムの操作体系は大きく変化した。<br /> GUIプログラムを記述するために生み出されたのが、オブジェクト指向とイベント駆動型プログラムに対応したプログラミング言語。<br /> それらではフォームのデザインがグラフィカルにできるようになっている。<br /> そしてフォームに配置されたオブジェクト(テキストボックスやコマンドボタン)に対する数多くのイベントが発生する。<br /> イベント駆動型プログラムでは、そのようなオブジェクトが発動するイベントに応じたプログラムを記述する。<br /> このようなプログラム開発を補助するのが、イベント駆動型プログラミングに対応したオブジェクト指向言語。<br /> 本では、GUIで作った顧客登録フォームと、コマンドラインで同様の情報を入力する例をあげて、違いを解説していた。<br /> <br /> 以前はアプリケーションの中にデータベース機能を記述していたが、今では汎用のデータベースを使うことが一般的。<br /> 本来はデータベースはデータの集まり、それを管理するのをデータベース管理システムというが、いまではひとくくりにデータベースということが多い。<br /> データベースではデータを高速に処理できるようにするために、データの格納方法に様々な工夫がされている。<br /> 代表的なモデル<br />  ・階層型データモデル<br />  ・ネットワーク型データモデル<br />  ・リレーショナルデータモデル<br /> リレーショナルデータモデルが現在最も広く用いられている。データを実体(entity)という単位で格納して、<br /> 実体間の関係をリレーションとして論理的に定義する。データベースに格納されたデータは、関係代数演算および集合演算によって取得する。<br /> Oracl、SQL Server、DB2などすべてリレーショナルデータベース。<br /> SQL(Structured Query Language)・・・データベースに対する問い合わせや指示を文章に近い感覚で操作できるように設計されたもの。<br /> SQLで記述された命令文をSQLステートメントと呼ぶ。<br /> ストアドプロシージャ・・・SQLを拡張した簡易言語、変数の定義、分岐や反復といった構造化処理機能がある。コンピュータ言語がなくてもデータベースを処理できる。<br /> SQは標準はあるもののデータベース毎に、仕様がちがうことがある。<br /> ストアドプロシージャはデータベース管理システムによって違う。<br /> プログラムからこれらデータベースを扱うのは一般的なことであり、コンピュータ言語の他にデータベース操作言語を習得するのは必須になりつつある。<br /> <br /> <br /> <br /> 第2章 コンピュータ言語の種類(動作による分類)<br /> 2.1 アセンブラ<br />  コンピュータが扱えるのは機械語だけ。機械語は人間には簡単にわからないので、ニーモニックという表記法が考え出された。ニーモニックは、機械語の命令に対して内容にあったシンプルな単語の省略形を割り当てたもの。<br /> プログラマにとって処理内容が連想しやすくなった。<br />  ハンドアセンブルの方法が図解されていた。<br />  アセンブラにはニーモニックの他に、ラベルの使用、分割アセンブル、メモリに対する名前の割り当て、マクロ機能が塔歳された。<br />  ラベルをつけることで、分岐の先の行番号がかわってもプログラムを記述しなおさなくてよくなった。<br />  機能ごとに分割したソースコードを別々にアセンブルできるようにして、時間を短縮できる。<br />  アドレスのままでは目的がわからなくなるが、名前をつけると連想しやすい。<br />  頻繁に使用される一連の処理を、一か所に記述しておく、アセンブラではそれをソースの置き換えで解釈してくれる。<br /> <br /> 2.2 コンパイラ<br />  定義がかわってきている。<br />  広義・・・ある言語で記述されたプログラムを別の言語のプログラムに変換するソフト。<br />  一般的・・記述されたプログラムを実行用のプログラムに翻訳するソフト。<br />  Javaでは「バイトコード」と呼ばれる中間コードを出力している。このようなタイプもある。<br />  クロスコンパイラ・・コンパイル作業を行っている機種とは異なる機種用のオブジェクトコードを出力するもの<br />  コンパイラの処理<br />   ・構文チェック、データ型チェック<br />   ・意味解析、コード生成<br />   ・最適化<br />  コンパイラにより、変数に型を定義できるようになった。通常は整数、浮動小数点、文字列など。コンパイルの段階で型をチェックしてくれるので、ミスが減った。<br />  代数式をそのまま記述できるようになった。<br /> <br /> 2.3 インタプリタ<br />  プログラムに記述された命令を順番に逐次解釈する方法。<br />  処理は主に、プログラムを解釈する部分と実行する部分にわけられる。<br />  処理中にエラーが発生するとプログラムを停止させる。<br />  一般的にコンパイラの言語より遅い。構文ミスを事前チェックできない。実行には専用の実行環境が必要。<br />  BASIC、LISP、Perl、Ruby、PHPなどがインタプリタ言語。<br />  スクリプト言語も、実行形態としてはインタプリタ型言語。<br />  BASICは逐次解釈、Perlは実行前にコードを読み込んで内部コードに変換する。<br />  逐次解釈では、ループなどは同じ作業が繰り返されることになる。<br />  データ型はインタプリタ型コンピュータ言語でも使える。実行時に型検査を行っている→動的型検査<br />  コンパイラとインタプリタの境目はだんだんなくなっている。Javaha中間コードをつくり(コンパイラ)、Java仮想マシン上で動作させている(インタプリタ)。<br /> <br /> 2.4 スクリプト<br />  簡潔な記述で目的を達成できるように設計されたインタプリタ型の簡易言語。<br />  インタプリタ言語とスクリプト言語の区別は明確ではない。<br />  実行ファイルを生成しない簡易的開発言語や、Webページ上でHTMLに組み込んで実行できる言語をスクリプト言語と呼ぶことが多い。<br />  ・Webページに組み込めるもの<br />   VBScriptとJavaScript、PHPなど。<br />   JavaScriptはWebブラウザ上でアニメーションや簡単なプログラムを実行することが目的。<br />   PHPはデータベースの操作に長けた言語、サーバーサイドで動作させると、Webシステムを簡単に構築できる。<br />  ・簡易開発に適した言語<br />   テキスト処理が得意なPerlやawk、オブジェクト指向のRuby。<br />   通常の言語と同等の機能を保有しているが、実行ファイルは生成せず、コマンドラインからプログラム入力やファイルを指定して実行できる機動性の良さが特徴。<br />  他にUNIXのシェルスクリプト(sh BASH)、MS-DOSのバッチファイルなども一般的なコンピュータ言語より機能的には劣るが、スクリプトに含まれる。<br /> <br /> 2.5 マクロ<br />  エディタや表計算ソフト、データベースなどのアプリケーションにおいて、ユーザが行う一連の操作を自動化する機能や、そのような目的で記述されたプログラムのこと。<br />  機能が豊富なアプリケーションの中には、ユーザの行う一連の操作を自動化するために、指定したメニュー操作やキー操作の組み合わせを登録できる機能を提供している。もともとのマクロ機能とはこのこと。<br />  最近のアプリケーションでは、メニューやキー操作だけでなく、通常のコンピュータ言語と同等の変数定義機能を装備したり、反復処理や分岐処理を可能にしたものが増えている。<br />  マイクロソフト社のExcel5.0から搭載されたVBA(Visual Basic for Application)は、言語としての機能は通常のコンピュータ言語に劣らない。<br /> <br /> <br /> <br /> 第3章 コンピュータ言語の分類(設計概念による分類)<br /> 3.1 代表的なコンピュータ言語の分類<br />  手続き型、関数型、論理型の3種類に分類した表があった。<br />  ほとんどの言語が手続き型で、関数型はLISP、Scheme、Standard ML、LOGO、論理型はPrologのみ。<br />  手続き型言語は、コンピュータ言語を用いて記述した命令とコンピュータの動作との対応がわかりやすいからと説明していた。<br /> <br /> 3.2 手続き型言語<br />  一般的に利用されているコンピュータ言語のほとんど。<br />  一つのコンピュータ言語を覚えれば、他のコンピュータ言語を習得するのは比較的容易といわれる理由。<br />  手続き型言語の特徴<br />   ・命令の逐次実行→指定された行から順番にプログラムを実行してく<br />   ・変数への破壊的代入→同じ変数に何度も値を代入すること<br />  作業手順を記すのが手続き型言語の書き方ともいえる。<br />  メモリの値を変更しながらプログラムが動作すると、コンピュータにとっても自然で高速なプログラムになる、しかし、実行時における変数の値を追跡して全体的な動きを捉えることが困難であるという特徴がある。このため、プログラムの誤りを訂正したり、プログラムが正しく動くことを証明したりしなければならないとき、手間がかかる言語といえる。<br /> <br /> 3.3関数型言語<br />  手続き型言語で作成されたプログラムはコンピュータの動きに近い。<br />  手続き型言語が、本当に人間が考えやすいプログラムを記述できるかについては結論がでていない。<br />  コンピュータ言語にとっては、人間の思考をそのまま記述できるかどうかが大切という考え方がある。<br />  ラムダ記法・・・プリンストン大学の論理学者アロンゾ・チャーチが提案した関数の表記法。関数の引数として関数を渡したり、関数の計算式を関数に返したりするような計算式を、あいまいな点をなくして記述することができる。 従来の関数の表現方法、「f(x)」は、f(x)という関数なのか、引数xに関数fを適用したのかわからないという欠点がある。これを、「f(x)=x+1」という関数を定義するときは、ラムダ記法で「λx.(x+1)」と表記する。<br />  チューリングマシン(現代のコンピュータのこと)で計算可能なことは、ラムダ計算で計算可能なことがチャーチによって示されている。<br />  純粋な関数型言語は、同じ変数に何度も値を代入すること(破壊的代入)を許可していない。これによってプログラムの解析が容易になり、拡張、修正しやすくなる。しかし多くの関数型言語では、実行効率のために破壊的代入を許可している。<br />  関数型言語は構造上、再帰的に関数を定義することが多くなるので、実行速度が遅い。<br />  再帰呼び出しはコンピュータに大きな負荷がかかる。(末尾再帰の最適化が可能なら問題ないが)<br />  命令を手順通り実行する必要がないので、記述されたプログラムを効率よく処理するコードに変換するのは困難。いまではかなり克服されていると主張する人たちもいる。<br />  関数型言語の特徴<br />   ・多相型(Polymorphism)<br />    C言語のテンプレートに似た機能。<br />    型宣言部分を省力してプログラムを記述し、使用するときに具体的な型に適用できる。<br />    自動的に肩を推論する機能をもつものもある。<br />   ・遅延評価(Lazy Evaluation)<br />    関数の引数について、必要になった時点で評価をする<br />   ・高階関数(Higher Order Functiton)<br />    計算結果として関数を返したり、実引数として関数をとることができる関数を「高階関数」という。<br />    C言語では関数へのポインタを使用することで、この動作をある程度模倣できるが、制限があるし、記述が不自然になる。<br />  関数型言語では、構造上メモリーリークを解消するためのガベージコレクションという機能が必要になる。<br />  これはLISPで導入された機能で、最近では手続き型言語でも導入されている。<br /> <br /> 3.4 論理型言語<br />  述語論理の定理証明を自動化したいという要求から生まれた言語。<br />  プログラムを論理に沿って記述する。<br />  通常の論理型言語でで用いられる論理は「述語論理式」と呼ばれる論理。<br />  プログラマは論理のみを記述し、論理を満たす解をコンピュータが探索するという形で開発される。<br />  述語とは真偽値を返す関数で、物事の関係や物事の性質をあらわすのにも使用する。<br />  例 太郎と花子は夫婦である。→夫婦(太郎,花子)<br />  論理記号(∀∧∨⇒)をつけて論理を記述する。<br />  ⇒はホーン節で、B⇒AでBならばAが成り立つ、B and C ⇒ A BかつCならば、Aが成り立つとなる。<br />  Prologでの記述方法を解説し、太郎と花子は夫婦であると定義して、太郎の妻を探すという例で解説していた。<br />  最初に定義を入力していき、「|?-fufu(taro, Wife)」ときくとPrologが「Wife=hanako」と返す。<br />  他にも夫婦や親子関係を定義して、定義してない親子関係を、夫婦関係から求める例があがっていた。<br /> <br /> 3.5 クイックソートプログラムの例<br />  手続き型言語Pascal、関数型言語LISP,論理型言語Prologによるクイックソートプログラムの記述例をあげ、<br />  記述の比較を行っていた。<br />  LISPでは配列を使うと手続き型言語と似てしまうのでリストを使っていた。<br />  Prologで空でないリストが整列している関係を表す述語を定義していた。<br /> <br /> <br /> 第4章 コンピュータ言語の技術<br /> 4.1 コンピュータ言語に対する要求と技術<br />  一般的な手続き型言語に焦点をあてて、これまでの技術を解説。<br /> コンピュータは汎用的な演算処理を実現する夢のような機械で、必要な処理を行うプログラムを記述さえすれば、どのような処理も可能になると思われていた。<br />  実際にはプログラミングという作業が予想したほどは簡単ではなかった。<br />  ソフトウェアの規模の拡大により、過去の資産継承や、プログラマの共同作業の難しさなどの問題をかかえている。<br />  そのような状況を脱却するため、プログラミング言語の技術に関する様々な研究がれ、提案がされてきた。<br />  多くは、コンピュータの能力を最終的なプログラムの実行時に使用するだけでなく、ソフトウェア開発支援にも利用することにより、生産性の向上をはかるためのもの。<br />  <br /> 4.2 構造化プログラミング<br />  コンピュータ言語では、常に何らかの制御構造が提供されている。<br />  エドガー・ダイクストラは「一つの入り口から出口に向かう適正なプログラムであれば、連接、分岐、反復3種類の基本混蔵の組み合わせで記述することが可能である」と提唱した。<br /> <br />  連接は順番通りに処理を実行すること。<br /> <br />  分岐とは、条件の成立と不成立によって実行する命令群を制御するためのもの。<br />  If...then...else命令、select文、switch文など。<br />  構造化機能のないBASICと、構造化されたVisual Basicで記述の違いの例をあげていた。<br /> <br />  コンピュータの最大のメリットは単純な命令を大量に実行することが得意なこと。 <br />  それぞれのコンピュータ言語には、指定された命令群を繰り返し処理するための構文が何らかの形で用意されている。<br />  for...next、do...loopなど。<br />  現在のコンピュータ言語に装備されている反復の命令は、ループを終了するための条件の指定方法によって、いくつかの反復制御命令が用意されている。<br />  ・カウンタを利用して、開始値から終了値まで繰り返す方法<br />  ・終了条件を満たすまで繰り返す方法で、条件判定がループの最後<br />  ・同上で、判定条件がループの先頭<br /> <br /> 4.3 オブジェクト指向<br />  本来プログラムを作成するという行為は、実世界の対象を抽象化し、コンピュータの世界にモデリングすることを意味する。そこで、人間位取っ手自然なモデリングを可能にする、モデリングの結果をそのままプログラミングできる技術が研究された。その結果考え出されたのがモデル化する対象をオブジェクトとして定義できる「オブジェクト指向」と呼ばれる技術。<br />  現在のコンピュータ言語には、洗練されたオブジェクト指向技術として、情報隠ぺいやモジュール化といった機能が盛り込まれている。<br />  しかし、概念自体は古くからあり、経験豊富なプログラマなら実現していた考え方である。<br />  オブジェクト指向という技術は、従来から提案されている数多くの開発技法をまとめあげて、プログラムの中で対象データを簡単にモデル化したり、操作することを可能にした機能。<br /> <br />  オブジェクト化<br />   オブジェクト指向のもっとも大事な概念は、処理対象を「オブジェクト」として捉えること。<br />   それぞれのオブジェクトには状態を表す「属性=プロパティ」と「手続き=メソッド、メンバー関数」がある。<br />   例では「円」というオブジェクトを定義して説明。<br />   オブジェクトの属性を変数のように指定することができるが、実装方法としてはこれまでのコンピュータ言語で実現されていた共通変数や共通関数を応用した考え方である。<br /> <br />  情報隠ぺい<br />   オブジェクト化によって、整理した属性と手続きを、他のプログラムから不要な参照や変更をうけないようにするための機能。<br />   JavaやC++、Visual Basicでは[private」で指定するとオブジェクトを外部から参照できなくなる。<br />   プログラマが注意して、不要な参照や変更をしないように気をつけるよりも、確実にミスをなくせる。<br /> <br />  クラスとインスタンス<br />   同じ属性と同じ手続きを備えたオブジェクトが複数必要になるときがある。<br />   このとき、同じ種類のオブジェクトを生成するために用意された考え方がクラスによるインスタンスの生成。<br />   クラスはオブジェクトのひな形で、クラスから必要なオブジェクトを生成するのをインスタンス化といい、生成されたオブジェクトをインスタンスという。<br /> <br />  継承<br />   新しいクラスを定義するときに既存のクラスを指定して、新しいクラスが元の暮らすとまったく同じ機能を持つようにすること。<br />   このとき既存のクラスと継承したクラスは、基底クラスー派生クラスまたは親クラスー子クラスと呼ばれる。<br />   クラスに同じナメの手続きが定義されたときには、新しく定義された手続きが有効になる(オーバライド)<br />   オーバライドを使うと、以前のクラスが保有していた動作を新たな動作に変更することができるようになる。<br />   この機能がないと、元のクラスのコードをすべて複製して変更や拡張を行うことになり、個々のオブジェクトの区別がつきにくくなる可能性があるのと、元のクラスにバグがあった場合、すべてのクラスを修正する必要がでてくる。<br />   機能の、追加、変更、拡張がやりやすくなる。<br /> <br />  動的束縛<br />   静的束縛・・・処理対象のオブジェクトの構造が確定している場合には、オブジェクト内の手続きの位置(関数のアドレスなど)がコンパイル時に決定される。関数呼び出しはアドレスで処理できる。<br />   動的束縛では処理するオブジェクトがどのようなものかコンパイル時は決定していない。関数呼び出しが成功するかは、実際に関数を実行してみないとわからない。<br />   静的束縛より速度は遅くなるが、柔軟なプログラムがかける。<br />   例として、スタックのクラスを作成しそこにスタックの中身を横方向に出力する関数を記述。継承したクラスで出力方向が縦方向になる関数を記述。最初のスタッククラスと、後のスタッククラスをそれぞれ生成して結果を出力させるプログラムがのっていた。<br /> <br /> 4.4 イベント駆動型プログラム<br />  1973年、ゼロックス社のパロ・アルト研究所のアラン・ケイが「Alto」を開発。<br />  ユーザインターフェースとして、ウィンドウシステム、アイコン、ビットマップ、マウスという概念を使ったもので、今日GUIと呼ばれるもの。<br />  GUIはユーザにはわかりやすいが、プログラム開発をするほうは面倒なもの。<br />  どこでイベントが発生するかわからないので、すべてを記述することはできない。<br />  GUIにおけるフォームの処理を簡単に記述できるようにするために、イベント駆動型という技術が発明された。<br />  イベントはフォーム上のコントロールなどに対して、「選択された」「キーが押された」といった状態の変化で発生。<br />  イベントハンドラは、そのイベントが発生したときに実行する処理を(プログラム)を関数の形で記述。イベントとイベントハンドらの対応付けはイベントループに登録する。<br />  イベントループが発生したイベントを監視して、イベントハンドらに登録されているイベントが発生した場合にはイベントに対応づけられたプログラムを実行する。<br />  イベントループはコンピュータ言語(開発環境)が解決してくれるので、プログラマはコントロールに対するイベントの指定のみを行うだけになる。<br />  この仕組みでイベント数の増大によるプログラムの複雑さの増加を防ぐことができる。<br />  コンピュータ言語がイベント駆動型プログラムに対応してGUIのイベント処理は飛躍的に簡単になった。<br />  ただし、どの順番でイベントが発生しても適切に処理がおこるように記述する注意が必要。<br /> <br /> 4.5 実行時コード生成<br />  インタプリタ形式で実行するプログラムに対して使用する高速化技法。<br />  繰り返し実行する命令列がキャッシュに生成されていなければ生成するようにすること。<br />  バイトコードを解釈して命令に該当する処理を実行するのではなく、機械語の命令を生成して機械語の命令を実行することで実現。<br />  1970年代後半に開発されたSmalltaikに実装されている。<br />  最近ではJavaがJITコンパイラ(Just-In-Time Compiler)という名前で同等の機能を実現している。<br /> <br /> 4.6 ガベージコレクション<br />  プログラムが動的に確保したメモリは、プログラムが解放しなければならないが、このような処理は、使用中のメモリを誤って解放したり、解放作業を忘れるというバグの原因になりやすい。<br />  不要になったメモリを検査し、自動的に廃棄する機能をコンピュータ言語が支援する機構が考え出された、これがガベージコレクション。<br />  1960年に開発されたLISPにすでに実装されていた。(動的メモリで動くの必須だった)<br />  ガベージコレクション=GCはコンピュータに負荷がかかる思い処理で、昔は数十秒システムが停止することもあった。<br />  現在のコンピュータに採用されている主なGCの方式<br />   ・マークアンドスイープ方式<br /> LISPで採用、セルに参照している先のポイントが格納されている。<br /> GCはこれをたどって、参照されているセルにマークをつけていき、<br /> 次にルートから順番にマークの無いセルを回収する。<br /> セルの大きさ一定でなくてはならず、間をつめる処理(コンパクション)をしない。<br />     Rubyなど<br />   ・コピー方式<br /> メモリ領域を二つにわけ、一方の領域が満杯になると<br /> GCはルートから参照されていいるセルをたどり(循環参照は辿らない)、<br /> 必要なセルをもう一方にコピーしていく、最後までたどったら元の領域を消す。<br /> セルの大きさは一定でなくてよい、コンパクションできるがメモリが半分しか使えない、<br /> ゴミが多いときは高速に動作する。<br />   ・リファレンスカウント方式<br />     セルの中にカウンタを保持し、他のセルから参照されたらカウンタを増やし、<br />     他のセルが参照をやめたら減らす。カウントが0になると、そのセルを廃棄する。<br />     プログラムの処理全体にGCが分散できる。不要になったセルが即座に廃棄できるメリットがある。<br /> 循環参照しているゴミが廃棄できない、リファレンス管理に手間がかかる。<br />     Perlなど<br />   ・世代別GC・・・次の法則を利用<br />     ・新しく作られたデータはゴミになりやすい。<br />     ・ある程度生き残ったセルは、そのまま残ることが多い<br />     ・新しいセルから古いセルへの参照が多い<br />     ・寿命が短いデータほど量が多い<br />     ある程度長く使用されているセルを特殊なセルとして特別な領域に移す。<br /> そしてこれらの旧世代のオブジェクトが格納されているセルをGCの処理対象から除外することで、<br /> 何度も無駄な処理を実行するのを避ける。<br />     Javaなど<br /> <br />  いずれの方式も、使用しているメモリはルートと呼ばれる領域から辿る。つまりルートから辿ることができるセル(メモリ領域を一定の大きさに分けたもの)が使用されているかどうかをみている。<br />  Pythonは、通常はリファレンスカウント方式、数回に1回マークアンドスイープ方式をとっている。<br />  C言語やC++にはない。 <br /> <br /> 4.7 ダイナミックリンクライブラリ<br />  関数・・・プログラム記述する単位と定義(DDL)<br />  ライブラリ・・・頻繁に実行する処理を関数の形であらかじめ作成し、まとめ上げたもの。<br />  コンパイラがソースコードをつくるときに、ライブラリから必要な関数を選択して結合。(静的結合)<br />  欠点、アプリケーションごとに結合されるので、メモリ領域が無駄になる。実行ファイル内に関数が格納されてしまうので、ライブラリ内の関数にバグがあると、すべてリンクしなおさないといけない。<br />  ダイナミックリンクライブラリはこれらの欠点を解消するため、プログラムを実行するときにライブラリを結合する。<br />  実行速度がおそくなるという欠点がある。 <br />  <br /> 4.8 最適化技術<br />  プログラムからオブジェクトコード(実行ファイル)を作成するとき、実行速度を向上させるために、元のプログラムと同じ処理を実現するオブジェクトコードに変換する機能。<br />  わかりやすくするために、本来は機械語レベルの話を高級言語レベルに置き換えて説明<br />  ・技術1・・・ループの外に出す。<br />    ループ内で変化しない部分をループの外に出してしまう。<br />  ・技術2・・・末尾再帰の最適化<br />    階乗を求めるプログラムを例に、末尾再帰の関数が関数呼び出しをジャンプ命令に置き換えることができるのを説明。<br />  ・技術3・・定数の畳み込み<br />    見た目をわかりやすくするための表記を最適化表記にする。<br />    例 menseki=(jouteiLkatei)*10/2→menseki=(joutei+katei)*5<br />    定数の畳み込みは、複数の式に定数の値を伝播させて処理を最適化する方法もある。<br />    この場合は、最適化されて削除された変数が、後のプログラムで使われないのが条件になる。<br /> <br /> 4.9 正規表現<br />  テキスト処理に長けたコンピュータ言語ではサポートしていることがある。<br />  対象となる文字列を表すための表記方法のことで、検索や置換における文字列の指定に使用する。<br />  文字列の先頭イッチヤ部分一致といった単純な文字列指定に比べて、文字列のパターンの指定により、取得した文字列をチェックするプログラムを記述しなくて細やかな文字列を指定することが可能になる。<br />  元はUNIXやLinuxなどのOS上のgrepやegrep、sed、awkといったツールで使用されていた。<br />  現在ではPerlやRuby、PHPといったテキスト処理を得意とするコンピュータ言語でも使用できるようになっている。JavaやC言語でもライブラリを用意すると正規表現を利用するのが可能になる。<br />  正規表現のすべての機能を覚える必要はないが、使いこなせると便利さが増す。<br />  サポートされている書式にはツールや言語で違いがあるので注意が必要。<br />  ・ワイルドカード指定→佐藤.*子だと、佐藤子、佐藤裕子、佐藤由香子、佐藤さんちの子などが照合<br />  ・文字クラス指定→[0-9][0-9][-/][0-9][0-9]で日付表示、10-21や10/22などの日付表示。-は範囲指定の他に文字としても指定するが、そのときは先頭に記述する必要がある。[a-zA-Z]→すべてのアルファベット。<br />  ・繰り返し→「*」で0回以上の直前の文字の繰り返し「XY*」なら、「X」「XY」「XYY」など<br />  ・選択→コーヒー豆と珈琲豆両方を表すなら、「コーヒー豆|珈琲豆」、または「(コーヒー|珈琲)豆。<br />  ・繰り返しと選択の応用→佐藤[あ-ん][あ-ん]*(子|美)→佐藤ひろ美、佐藤ゆみ子に照合<br />  ・先頭一致と行末一致・・・「^」段落の先頭、「様$」様で終わる<br />  正規表現は便利だが、記述方法は簡単とはいえない、言語によっては簡単に記述できる独自の表現法を提供している。Perlの表記法を紹介していた。<br /> <br /> 4.10 連想配列<br />  配列・・・同じ型の変数をメモリの連続領域に割り当てて、添え字を用いてアクセスすること。<br />  連想配列は添え字に文字列を使用できる配列のこと。<br />  awkで有名になり、その後PerlやRubyといったテキスト処理を得意とする多くのスプリクト言語に移植された。<br />   商品名と販売価格の表から、商品名ごとに合計金額と販売台数を求めるプログラムを作成する例で、<br />  通常だと、商品名を配列にわりあてて、商品名に割り当てた番号を得る処理が必要なところを、<br />  商品名でそのまま取り出すプログラムがのっていた。<br />  実装上非常に効率がよくないので、PerlやRubyではハッシュ関数を用いて添え字に使用する文字列を数値に変換してから格納している、それでこれらの言語では連想配列はハッシュと呼ばれている。<br /> <br /> <br /> <br /> 第5章 プログラム開発環境<br /> 5.1 一般的な開発環境<br />  現在使用されているプログラム開発時におけるツールの一覧表<br />   エディタ、フォームデザイナー、アセンブラ、コンパイラ、インタプリタ、リンカ、デバッガの説明<br />  VisualBasicやDelphiはコンピュータ言語自体が開発環境に完全に埋め込まれているので切り離せない。<br /> <br /> 5.2 エディタ<br />  テキストを記述できる機能をもつ、プログラムを作成するためのツール。<br />  最近の補助機能、自動インデント、自動構文チェック、自動構文生成、色分け表示、命令や関数の入力補助機能<br />  目的は、プログラムを見やすくすること、間違いのないプログラムを記述すること。<br />  それぞれについてVisual Studio.NETを例に説明していた。<br /> <br /> 5.3 コンパイラ<br />  記述されたソースコードを実行用のオブジェクトコードに変換するためのソフト。<br />  コンピュータ言語の本体に相当するもの、統合開発環境を持たない言語ではコマンドから実行するのが一般的。<br />  現在のコンパイラには、オブジェクトコードの生成以外に、構文チェック、変数の型チェック、最適化処理、デバッグ用のコード挿入などの機能がある。<br /> <br /> 5.4 リンカ<br />  コンパイラで生成した実行用のオブジェクトコードを基にして、コンピュータで直接実行できるファイルを生成する機能。<br />  コンパイラで生成したオブジェクトコードとライブラリを結合して、プログラムのアドレスを割り当てる。<br />  最近はコンパイラと一体になっているものも多い。<br />  Visual Studio.NETではビルドという名前で一体になっている。<br /> <br /> 5.5 デバッガ<br />  プログラムに含まれるバグを発見し、取り除く作業を補助するツールの包括的呼び名。<br />  代表的機能、ブレークポイントの設定、プログラムのステップ実行、変数のウォッチ、関数の実行履歴<br />  それぞれについて開発環境の画面を乗せながら説明。<br /> <br /> 5.6 フォームデザイナ<br />  RADツール(Rapid Application Development)に装備されているGUIのフォーム作成機能。<br />  統合開発環境で新しいプログラムを作成すると、自動的に新規フォームが作成されて、フォームデザイナによる作業から開始できるようになっている。<br />  多くの統合開発環境において、フォームデザイナで作成されたフォームはオブジェクトのプロパティをソースファイル内に保存し、テキスト情報として閲覧、編集できるようになっている。<br /> <br /> 5.7 オブジェクト指向への対応<br />  オブジェクト指向の概念が取り入れられたコンピュータ言語では、オブジェクトのプロパティやメソッドの操作を補助するために、プロパティエディタ、オブジェクトブラウザといった機能が装備されている。<br /> <br /> <br /> <br /> 第6章 アセンブラで見るコンピュータの動作<br />  コンピュータの動作を仕組みを考える場合は、プログラムがコンピュータにもっとも近いところでどのように動作するか知っておくことが大切。<br />  アセンブラにおけるプログラムの動作を知ることは、高級言語が実現しているプログラムの処理に対する認識を深めることに役立つ。<br /> <br /> 6.1 アセンブラの基本的な動作<br />  この章では現在のPentiumシリーズの元になった8086CPUのアセンブラで解説。<br />  実際にはアセンブラはCPUによって違うので、注意すること。<br /> <br /> 6.2 8086CPUにおけるアセンブラの主な命令<br />  どのCPUでも、データ転送、算術演算、論理演算など同種の命令が用意されている。<br />  一つのCPUを習得すると、他のCPUでも推測がつくようになる。<br />  3ページにわたって命令の一覧表がのっていた、上の基本命令の他に、比較、ジャンプ、ループ、コール/リターン命令、スタック操作命令、入出力、割り込み、その他の命令がのっていた。<br />  一般的なコンピュータ言語より命令が非常に少なく、体系が異なる。変数の定義やデータ型の定義がない。<br />  算術演算などの命令のオペランドに1バイト、2バイトの値しか指定できない。<br />  ifのような判定用の命令はなくCMPだけ、関数はサブルーチンの呼び出しだけ。<br />  高級言語で記述されたプログラムも、これらの組み合わせで実現されている。<br /> <br /> 6.3 2進数と16進数<br />  コンピュータでは信号のオン・オフを利用するので2進数が便利なので使われるようになった。<br />  コンピュータの高速化で人間の計算する処理に近い形での値の操作が可能になってきたが、創世期の名残がそこここに残っている。<br />  2進数、8進数、16進数の説明。<br /> <br /> 6.4 四則演算<br />  8086CPUでは、加算、減算、乗算、除算の4つの計算が行えるようになっている。<br />  ただし引数には2バイトまでしかとれいない。<br />  2バイトのデータおける四則演算を説明。<br />  汎用レジスタ4種類を使い、MOVでAXレジスタに一方をいれて、それとADDするなど。<br />  コラムでDEBUGコマンドによるアセンブルとプログラムの実行を解説。<br />  3つの数の加算は、AXレジスタに加算を繰り返すことで行われる。アセンブラには式がない。<br />  乗算はAL、DLレジスタを使って行われる、16ビットのときは8ビットに分解して行われる。<br />  除算はこれに似ている。<br />  インクリメント命令(INC)とデクリメント命令(DEC)は加算や減算よりメモリを使わないので、高速化のために用意されている。<br /> <br /> 6.5 大きな数の計算<br />  16ビットより大きな数をプログラムで処理する方法。<br />  キャリーフラグにより桁上げが行われたことがわかるようにしてADC命令を使って処理している。<br />  実例が解説されていた。<br /> <br /> 6.6 負の数の計算<br />  8ビットの場合は、最上位のビットを符号して使用する。取り扱えるのは-128~+127となる。<br />  こういう取り扱いは-10+5などの計算で便利。<br />  符号付加算ではキャリーフラグは無視できる。<br />  符号付乗算と除算はIMULとIDIVという命令がある。<br />  符号付の乗算と除算の命令をもたないCPUでは2の歩数を捕って、一度正の値に変換してから計算を行い、最後に符号だけを別によs里するような方法をとる必要がある。<br /> <br /> 6,7 小数の格納<br />  小数はコンピュータが処理できないのでプログラムで処理している。<br />  高級言語における小数の格納方法は「IEEE754」で規定されている。<br />  単精度floatは4バイトでデータの格納方法は符号1ビット、指数部8ビット、仮数部23ビットとなる。指数の基数は2。10進数で1234.567だと、1.23456×10の3乗、2進数で1011.011=10進数の11.375は、1.011011×2の3乗となる。<br />  仮数部は常に先頭桁が1なので値として格納しない。<br /> <br /> 6.8 メモリとのやりとり<br />  本来の機械語には変数という概念はないので、アセンブラにもない。<br />  メモリの領域に名前を付けておくことで、コード内で変数のように使用することができる。<br />  データはあくまでバイト単位が基本。<br />  配列という概念もなく、メモリの領域を連続的に確保しておくことで最初のメモリの場所を起点としてデータを書く方する方法で配列を取り扱う。<br />  16ビットのアドレスでメモリの場所を指定する。命令はMOVを使う。MOV AL,12H MOV [0100H],ALこれで<br /> 12H を0100Hアドレスに格納したことになる。<br />  BXレジスタを使う方法。<br />  メモリにデータを格納し、それを使って演算を行う方法解説。取り扱うときはALレジスタを仲介。<br />  メモリはCPUの外、レジスタは中、レジスタに格納するほうが高速。<br />  配列のようにデータを格納して取り扱う例。BP=ベースポインタ、SI=ソースインデックス、DI=ディスティネーションインデックスを使う方法。実際には同じ機能をもつレジスタに割り当てるだけだが、機能がわかりやすいように、このように命名するのが一般的。<br /> <br /> 6.9 条件分岐<br />  フラグとジャンプ命令を組み合わせて条件分岐を行う。<br />  8086CPUに装備されているフラグ<br />   OF(オーバーフローフラグ)符号付演算で桁あふれが発生した状態<br />   DF(ディレクションフラグ)ストリング命令で増減の方向を指定する<br />  など<br />  フラグの状態はDEBUGコマンドでレジスタの内容を表示しているときに右下の欄で確認できる。<br />  例としてZF(ゼロフラグ 演算の結果が0であることを表す)を使った分岐が解説されていた。<br />  ジャンプ命令には無条件で指定したアドレスに移動するものもある。フラグと条件ジャンプ、無条件ジャンプの組み合わせでselect...case...end selectのような機能も実現している。<br /> <br /> 6.10 論理演算<br />  アセンブラのプログラムではビットの処理が増える分だけ、論理演算を使用する機会が増える。高級言語のような論理値がないことも影響している。アセンブラでは値の判定処理より、ビット演算を使う方が高速で自然。<br />  AND,OR、XOR,NOT,NEG(2の補数をとる)、TEST(AND演算を行うがフラグだけたてて値は変化させない)最後の二つは8086特有。<br />  使い方は加算や減算と同じ。<br />  偶数と奇数の判定ではビットの右シフトを使うのが一般的、最下位ビットのみの判定でよいので。<br /> <br /> 6.11 繰り返し処理<br />  LOOP命令を使ってCXレジスタが0になる指定されたアドレスにジャンプするという処理で、繰り返し機能を実現している。<br /> <br /> 6.12 サブルーチンの呼び出し<br />  サブルーチンの呼び出しにCALL、元のアドレスに戻るRETが用意されているのみ。<br />  引数も戻り値もない。<br />  アセンブラではすべのメモリ領域がプログラム内で共有されている。<br />  そのため、プログラムが大規模になるとわかりにくくミスの元になる。<br />   <br /> <br /> 第7章 さまざまなコンピュータ言語と開発環境<br /> <br /> 7.1 原始的なコンピュータ言語<br />  機械語<br />  機械語はCPUが直接実行できる唯一のコンピュータ言語。<br />  2進数で格納され、通常は16進数で表記されるデータの塊。プログラムとデータが格納されている。<br />  人間がプログラムを作成するときには、機械語と1対1のニーモニックという記述を使用する。<br />  CPUの種類ごとに機械語は異なる。高級言語と違って命令の種類は少ない。<br />  計算ではレジスタを使用し、8086CPUの場合汎用レジスタは4種類。通常アキュムレータと呼ばれるレジスタが中心的に使われる。<br />  レジスタとメモリには整数値しか格納できないので、小数などを使用するときはプログラマが自分有に値の構造を定義して使う。<br />  高速で、ハードウェアのスペックをもっともひきだせる。<br />  プログラム例としてコラッツ予想がのっていた。<br />  コラッツ予想・・・ある自然数nに対して、それが奇数なら3倍して1を加え、偶数なら2で割る、これを繰り返すと、どのよう自然数からはじめても最後は1→4→2→1の繰り返しになる。とういもの、まだ証明はされていない。<br />  <br />  アセンブラ<br />   ニーモニックより人間に近い言語表現で、プログラミングを補助する機能として、メモリ領域に名前をつけることができる、定数を定義できる、ラベルをつけられる、文字列を記述できることなどが追加された。<br />   データ型を指定した宣言はできない。<br />   コンピュータに接続されているデバイスドライバなどはアセンブラを使っているものも多い。<br />   コラッツ予想のプログラム例を紹介。機械語と共通。<br /> <br />  クロスアセンブラ・・・最終的にプログラムを実行するハードウェアと異なるハード魚エアで機械語のプログラムを開発するためのもの。<br />  逆アセンブル・・アセンブラを機械語に戻すこと。<br />  MASM・・・・マクロアセンブラ、WindowsDDK(ドライバ開発キット))に含まれている。<br /> <br /> 7.2 初期のコンピュータ言語<br />  FORTRAN<br />   1954年IBMのジョン・バッカスが数式で記述されたプログラムを解釈して機械語にコンパイルできるコンピュータ言語を考案した。これがFORTRAN。<br />   世界で初めての高級言語。高級言語の研究開発のはじめとなった。<br />   他の処理系の機能をとりいれて、本の自転でFORTRAN90が最新で、自由カラム、ポインタ、モジュールなどが組み込まれた。<br />   スーパーコンピュータなどで使われている。数多くの数値計算用ライブラリが充実しており、言語仕様が数値演算処理に最適化した構造であること、さまざまなメーカーが処理系に対して積極的に最適化技術をとりいれていることから、現在でも科学技術計算に使用されている。<br />   FORTRAN77は特に多くのプログラマに利用された。パンチカードを使っていたころの名残が固定カラム方式にあらわれている。<br />   条件分岐と繰り返し(単純なもののみ)が装備されており、入れ子にできる。行ラベルはループの飛びさきなどに使用される。比較演算子が一般的な言語と大きく違うサブルーチンも使用できるが引数は参照渡しに限られる。<br />   FORTRAN90での追加機能<br />   ・多重分岐SELECT CASEの追加<br />   ・条件によって繰り返しを行うDO WHILEの追加<br />   ・繰り返しを制御する命令としてCYCLE文(Continue)、ECXIT文(break)が追加<br />   ・構造体が使用できる<br />   ・型の定義と変数をまとめるモジュール機能が追加<br />   ・配列操作に関するライブラリの強化<br />   ・再帰呼び出しが可能に<br />   ・ポインタを使用して動的配列の割り当てができるようになった。<br />  1-10までの数値を加算して、その経過を出力する例<br /> <br />  COBOL<br /> 1959年米国国防省が事務処理用にメーカーとともに開発。<br />  通貨の最小単位を正確に計算できるようなデータ型を用意。<br />  ファイルを扱うことが常に意識されていて、ファイル内のデータ構造の形式を指定する書式がある。表形式のデータ処理に特化した言語。  <br />  1行に1命令、固定形式だと1-6カラム→一連番号領域、7カラム→標識領域(前の行からの継続やコメントを表す)、8カラム以降→プログラムと決められている。<br />  見出し部、環境部、データ部、手続き部にわけてプログラムを記述。<br />  言語仕様も構造化されているので、仕様変更に強く、保守性にすぐれている。<br />  データに対して演算処理を行う場合はCOMPUTE命令を使用する。COMPUTE データ項目=演算式<br />  条件分岐はIF命令とEVALUAR命令、反復はPERFORM で成立条件を指定する方法、繰り返し回数を指定する方法、カウンタ変数を使用する方法がある。<br />  例として九九の表を出力するプログラムがのっていた。<br />  配列は表と呼ばれる、表はOCCURS句で指定してデータ名(添え字)で使用する。<br />  「報告書機能」は指定された報告書の形式でデータ出力する命令。<br />  簡単な英単語はすでに予約語として登録されていることが多い。<br />  例として入力ファイルを1件ずつ読み込んで、商品ごとに数量を集計して合計金額を計算し、出力ファイルにだすプログラムがのっていた。<br /> <br />  ALGOL<br />   1950年代後半に、アルゴリズムをできる限りスムーズに記述するために開発された言語。<br />   エドガー・ダイクストラが提唱した構造化の機能をとりいれた初めてのコンピュータ言語。<br />   構造化と再帰呼び出しの機能がついていた。<br />   FORTORANでは言語の構文に関する規則にあいまいなところがあったので、厳密な言語仕様を策定して解決した。<br />   ALGOL68では使用が複雑でコンパイラをつくるのが困難になり、あまり使われなくなったが、仕様はC言語やPascalに影響を与えている。<br />   変数はあらかじめ宣言しておかなければならい(入力ミスが減り、コンパイル時にエラーが見つけやすい)<br />   ブロック構造(複数の分をBEGIN ENDでまとめる、プログラム全体もそう)とローカル変数の導入。<br />   プログラム例はユークリッドの互除法で最大公約数を求めるもの。<br /> <br />  PL/I(ピー・エル・ワン)<br />   1960年代後半、コンピュータの利用範囲が広がり、科学技術計算と事務処理に分類しておくのが困難になった。汎用的言語が求められた。<br />   ALGOLを基にして、FORTRANとCOBOLのよいところを併せ持つ言語として開発。<br />   構造体、エラー処理、マルチタスク機能、ビット処理などが盛り込まれた。<br />   1964年Multics(マルチックス)というOSの記述に採用された。これはUNIXの先祖みたいなOS。<br />   大規模な言語仕様をもつのでコンパイラの開発が困難で多くのライブラリを必要とするため実行ファイルが大きくなる欠点があった。このためIBMの大型汎用機でりようされることがほとんどだった。<br />   2カラム目から72カラム目の間にプログラムを記述できる。<br />   データ型は、整数、実数、複素数、倍精度(処理系により精度は異なる)が用意された。<br />   文字演算が可能で、文字列を扱う関数も多く用意されている。<br />   サブルーチンでは値を返すことができる。RETURN 値<br />   再帰呼び出しもできる。<br />   条件分岐はIF...THEN...ELSE構文。DO...ENDでブロック化してTHEN節やELSE節に複数の文を記述可能。<br />   反復のDO分には、変数の初期値、終了値、増減値を指定する、反復条件を指定、反復に使用する値を列挙の記述法がある。<br />   プログラム例では1-10までの数値を加算して、その経過を出力するがのっていた。<br />   <br />  Simula(シュミラ、シミューラ)<br />   1962-67にノルウェー計算センターのクリステン・ニガードとオルヨハン・ダールが開発。<br />   さまざまな事象をシュミレーションするために開発された。<br />   オブジェクトという概念を導入した初めてのコンピュータ言語。<br />   クラス、継承、銅的束縛の機能をそなえている、はじめてのオブジェクト指向言語と呼ばれている。<br /> <br /> 7.3 C言語系<br />  B言語<br />   BCPLという言語の縮小版として1970年DEC社のPDP-7で開発された。<br />   コンパイラによって中間言語を生成し、それをインタプリタ上で動作させるタイプのコンピュータ言語。<br />   データ型はもたない。<br />   誕生までの流れ<br />   ALGOL60→CPL→BCPL→B言語→C言語<br /> <br />  C言語<br />   ベル研のデニス・リッチーとブライアン・カーニハンが1973年にB言語を改良して開発。<br />   コンピュータ上でそのまま事項可能な機械語プログラムを出力するコンパイラにした。<br />   豊富なデータ型。<br />   C言語でUNIXが書きなおされた。UNIXは大学に無償で配布されて拡大した。OSのソースも公開されていた。<br />   機種に依存する部分はコンパイラの機能に含まれないで、ライブラリとして組み込まれる。機種依存が低くなり、さまざまなハードウエアに展開した。<br />   コンパイラは小さく、移植も容易、パソコンでも使用された。世界中で幅広く使われるようになった。<br />   簡潔にプログラムを記述できよるように工夫されている。Pascalの表記と比較していた。<br />   代入文自体が値を持てるので、そのまま条件判定ができる。(習得のハードルともなっている)<br />   while((c=fgetc(fp)) != EOF ){...では、c=fgetc(fp)) が値を持つ。<br />   真偽を表す型がなく、整数を代わりに使用する。<br />   1を加える処理、指定した値を加算する処理はアセンブラと類似の書式があり、高速化に寄与している。<br />   処理の流れをこわすことが多いgoto文ではあるが、ループの中断や再実行ではないとわかりずらいこともある。<br />   break、continueの導入。<br />   変数のアドレスを記憶する特殊な変数ポインタ。これによりメモリを直接操作できる。<br />   プログラミングの幅はひろがるが、馬具の原因にもなる。<br />   サンプル、ファイルの内容を画面に出力する関数、文字列をコピーする関数(代入文が値をとる例でもある)、文字列を比較する関数(ポインタで配列を処理する例でもある)<br />   インラインアセンブラという機能が搭載されている処理系もある。使用すると互換性は失われる。<br /> <br />  C++(シー・プラス・プラス、シー・プラ・プラ)<br />   C言語の機能を提供しつつ、オブジェクト指向のプログラミングを支援する目的でベル研のビアルネ・ストラウストラップによって1979年から開発。<br />   Sumilaからクラスの概念を導入。<br />   1983年に課そう関数や演算子の多重定義が追加されて頒布が開始された。<br />   C言語の上位互換なのでC言語のプログラムがそのまま使える。<br />   最初UNIXで動作するものだったが、マイクロソフト社のVisual C++ ボーランド社のBorlandC++が発売され、Windows用のアプリケーション開発の標準言語としても利用されるようになった。<br />   追加された機能の中でも代表的なものを紹介<br />    コンストラクタ・デストラクタ、静的束縛と銅的束縛、多重継承、関数の多重定義(オーバーロード)、演算子の多重定義(オーバーロード)、テンプレート(型をパラメータとして渡し、手順のみを記述できる機能、他の言語でジェネリックや総称とよばれる)<br />   プログラム例では複素数の演算をおこなっている。<br />  <br />  C#(シー・シャープ)<br />   2002年にマイクロソフト社が .NET Framwork用の開発言語として開発。<br />   C++を拡張。JavaやVisualJ++に近い文法。<br />   C#は .NET Framwork用なので実行ファイルでなくCLR(Comon Language Runtime 共通言語ランライム)用の中間コードを生成する。<br />   当初マイクロソフト社のVisualC#.NETでのみ利用できたが、ボーランド社のDelphi2005に搭載された。<br />   C++やJava、Visual Basicとの相違点を中心に特徴を説明。<br />   クラスをまとめるのにJavaはパッケージ、C#では名前空間(Namespace)という概念を使う。<br />   Javaではimport C#ではusing<br />   GUIを構成する部品の属性の値を取得変更する方法はVisual Basicと同じ。<br />   デリゲートが追加されている。デリゲートは関数ポインタに似た機能。変数宣言とその変数へ代入できる関数の型を定義する機能、関数の引数として使用することで、関数の引数に関数を渡すことが可能になる。<br />   デリゲートがない処理系では関数の引数としてオブジェクトしか渡せないので、イベントハンドラを登録するにはクラスで包んで関数に渡す必要があった。<br />   反復を抽象化した「イテレータ(反復子)」を使って繰り返しを定義するためのforeach分が用意されている。<br />   イテレータはCKKではSTL(スタンダード・テンプレート・ライブラリ)として提供されていた。<br />   ガベージコレクションがサポートされている。<br />   演算子のオーバーロードが定義できる。<br />   配列の配列と2次元配列が定義できる。<br />   C++に似た構造体を記述するためにstruct宣言が用意されている。クラスはヒープ領域、structはスタック領域に確保される。構造体はObjectクラスを暗黙的に継承している。<br />   不適切な多重定義によるバグをなくすために、多重定義を有効にするためにはvirtualとoverrideを記述する必要がある。<br />   サンプルはユークリッドの互除法で最大公約数を求めるプログラム。<br />   比較のため同じ動作をするプログラムがVisual J++、 Visual J#、 Visual Basic.NETでかかれている。<br /> <br />  Objective-C(オブジェクティブ・シー)<br />   C言語にオブジェクト指向の機能を導入したコンピュータ言語。<br />   1983年にスtップスートン者の創設者ブラッド・コックスが開発。<br />   1985年NeXTコンピュータ(スティーブ・ジョブズがつくった)のOSであるNeXTSTEPの開発言語になった。<br />   このコンピュータは黒いキューブ型の特徴的携帯で画面表示にDisplay PostScriptをとりいれていた。<br />   その後ハードから撤退しNextソフトウェアとなり、NeXTSTEPの技術はOPEN STEPとして公開された。<br />   1997年アップルにNeXTソフトウェアが買収され、OPENSTEPは改良されてMac OS Xとなった。<br />   よってObjective-CはMac OS Xの標準的なアプリケーション開発言語である。<br />   Smalltalkで採用されたメッセージ送信によってオブジェクト指向を実現。<br />   そのためC++とは見た目からかなり違う。<br />   変数の代入 Objective-Cはオブジェクトへのポインタ、C++ではオブジェクトまたはオブジェクトへのポインタ<br />   関数(メソッド)呼び出し、Objective-Cは動的束縛のみ、C++は静的束縛と銅的束縛<br />   継承 Objective-Cは単一継承のみ許可、C++は多重継承が許可<br />   演算子のオーバーロード、Objective-Cは不可能、C++は可能<br /> <br /> 7.4 Pascal系<br />  Pascal<br />   1968年スイス連邦工科大学のにクラウス・ヴィルトがコンピュータ言語の適切な教育を目的として開発。<br />   構造化に必要な構文をそなえており、プログラムをすっきり記述できるという特徴があった。<br />   そのため、同じアルゴリズムなら、だれが書いても同じようなプログラムになるという性質がある。<br />   ユーザがデータ型を定義できる。<br />   言語仕様がコンパイラの開発に適していたので、多くのコンピュータ上で動作するようになった。<br />   1978年カリフォルニア大学サンディエゴ校のケネス・ボウルズが開発したUCSD PascalはP-Codeという中間コードをP-Machineとよぼれるインタプリタの仮想環境上で動作させるJavaのようなものだった。<br />   1983年に発売されたボーランド社のTurbo Pascalは驚異的コンパイル速度と、使いやすい統合開発環境で世界的ヒットになった。<br />   ALGOL60がベースなのでスタイルが似ている。<br />   順接、分岐(if文、case文)、反復(for文、whie文、repeat...unitil文)が用意されているので構造化されたプログラムが記述しやすい。<br />   構造化プログラミング→段階的に詳細化してプログラムを作成する→入れ子構造。Pascalで実現しやすい。<br />   言語の厳密性のため、使う目に変数や関数は必ず宣言。<br />   変数は通常の型の他に、列挙型、部分範囲型、集合型、レコード型、ポインタ型が用意されている。<br />   記述形式は自由形式。複数行のコメントもOK。可読性の向上。<br />   現在では一般的なものが多い。つまりPascalが与えた影響は大きい。<br />   プログラム例は階乗を計算するもの。<br /> <br />  Object Pascal(Delphi言語)<br />   Pascalにクラスや継承などのオブジェクト指向機能を拡張したもの。<br />   1995年にボーランド社が開発した統合開発環境Delphiに搭載。<br />   Delphiはフォームデザイナを持つグラフィカルな統合開発環境。<br />   豊富な機能とコンパイルや実行が早いのが支持の理由になった。<br />   データベースを簡単に操作するクラスを装備。<br />   ボーランドが開発したLinux上の統合開発環境Kylixにも採用されている。<br />   Delphi7からはObject PascalからDelphi言語に名称が変更されている。<br />   継承、多重定義、オーバーライド機能がある。<br />   クラスの宣言はtype...endで定義、クラス型には、メンバ変数、メンバ手続き、メンバ関数を定義できる。<br />   多くのクラスをまとめるUnitという単位が用意されている。<br />   例外処理機能を装備<br />   単一継承機能あり、静的束縛と動的束縛両方を備えている。<br />   プログラム例はクラスの継承と多重定義、オーバーライドを使用した円と色つきの円をかくプログラム。<br /> <br />  Ada<br />   1970年代米国国防総省が制御ソフトを統一しようと開発。<br />   1983年にANSI標準規格、1986年にISO規格として制定されている。<br />   世界初のプログラマと呼ばれるエイダ伯爵夫人からとった名前。<br />   厳密な言語仕様をもつ、多機能なコンピュータ言語。<br />   コンパイラを使用するのにミニコンピュータやワークステーションを必要とするのでパソコン向けに普及しなかった。<br />   1990年代にはオブジェクト指向の導入。1995年にISO標準としてオブジェクト指向言語として初めて承認。<br />   この時点では2005年の規格が最新。<br />   コンパイラに対して厳密な互換性を保証させるためAdaコンパイラであると認定する試験がある。<br />   記述の効率より読みやすさ優先。保守の必要性から。<br />   特徴は、厳密な型付け(動的結合は許さない)、パッケージの導入(外部へ公開するものを宣言)、並列処理(タスク)、例外処理、汎用体(C++ のテンプレートと多重定義を組み合わせた機能に似たもの、型や大きさを変えたスタックのプログラムを簡単に用意できる)<br />   サンプルはコラッツ予想プログラムをWindows200ProfessionalのObjectiveAda for Windows Special Edition 7.2.2で作成したもの。<br /> <br /> <br /> 7.5 Java系<br />  Java<br />   サン・マイクロシステムズ社のジャームズ・ゴスリンがデジタル家電向けに開発したOakという言語を、インターネット向けに改良したもの。1995年に発表。<br />   Javaと同時にJavaで開発されたHotJavaというWebブラウザも発表。音声や動画を直接再生できた。<br />   インターネットでアプリケーションを配信できるアプレット技術と、その開発言語Javaが話題に。<br />   1999年にJavaを大幅に機能拡張したJava2(JDK1.2)が発表。<br />   バイトコードという中間コードをJava仮想マシン(JVM)で実行する仕様。<br />   速度が遅いという欠点はハードの進化がおぎなった。<br />   Java仮想マシンが動作する環境ならどんなコンピュータ上でも動作するようになった。<br />   研究言語でなく、実用として開発された。既存のよいところをとりいれて、不要なものは削除した仕様。<br />   バランスがよい、インターネットとともに普及した。<br />   C++に似た構文を採用したオブジェクト指向言語。<br />   クラスの定義と継承・・・インナークラス(クラスの中にクラスを定義する)や名前を指定せずにクラスを定義できる匿名クラスがある。継承は単一継承<br />   マルチスレッド・・・言語の使用として組み込まれている<br />   実行時コード生成・・・JITコンパイラで実行時コードを生成。インタプリタは遅いので。<br />   ガーベージコレクション<br />   シリアライズ・・・現在のオブジェクト群の状態をファイルに保存できる。そして保存したオブジェクトをメモリにロードして実行を再開できる。<br />   アプレットとiアプリ、EZアプリ、Vアプリ・・・静的なWebページをつくるアプレット、他は携帯電話のなかで動作する単独のアプリケーション。携帯会社によって名称が異なる。<br />   セキュリティ対応・・・インターネット前提なので、バイトコードの正当性チェック、コードの署名、メモリ領域チェック機能がついている。<br />   安全性が携帯電話に採用された理由の一つである。<br />   プログラム例はアプレットでマウスで句陸した場所に5つの円を描画するプログラム。<br /> <br />  Visual J++<br />   マイクロソフト社が開発したJava系の言語。<br />   Visual J++1.1はJDK1.2準拠、その後Visual Studio6.0でVisual J++6.0となった。<br />   Visual J++6.0はJDK1.1に準拠しているが、Windowsアプリケーションの開発を補助するために大幅に機能が拡張されている。<br />   WFCの使用(マイクロソフトの開発したライブラリなので、Windows上でしか動作しなくなる)、<br />   ActiveXコントロールの利用(Windows上でしか動作しなくなる)、ADO(ActiveX技術でデータベースと連携するライブラリ、Windows上でしか動作しなくなる)サポート、  RADツール(フォームデザイナ)として利用。<br />   プログラム例はユークリッドの互除法。<br /> <br />  Visual J#<br />   Visual J++の後継言語で、マイクロソフト社が開発したJava系のコンピュータ言語。<br />   Visual J++を .NET Framwork仮想環境に対応させたもの。<br />   つまり.NET Framwork環境で動くjavaアプリケーションが開発できる。<br />   ADO.NETが利用できる。<br />   IISで動的なWebページの生成に使用するASP(Active Sever Pages)でも利用できる。<br />   JDKと同等の機能をもつクラスライブラリを使用できるが、Javaのバイトコードは生成できない、アプレットも作成できない。<br />   .NET FramwrokのCLRがガーベージコレクションを実行してくれる<br />   サンプルはユークリッドの互除法。<br /> <br /> <br /> 7.6 BASIC系<br />  BASIC<br />   1964年、入門者のためのコンピュータ言語として、ダートマス大学でジョン・ケメニーとトーマス・カーツが開発。<br />   対話型の環境で初心者でも気軽にプログラム作りを始められる。<br />   1980年代のパソコンの登場とともに広まり、研究者や専門プログラマから一般大衆まで広まった。<br />   パソコンに標準OSが搭載されていない時代で、電源をいれるとBASICが起動した。<br />   BASICはOSの代わりとしてROMに搭載されていた。<br />   ケメニーとカーツがBASICをパブリックドメインとして配付したことも広がる要因になった。<br />   言語仕様でさえ変更を禁止しなかったので、異なる仕様のBASICがたくさんうまれた。<br />   このため同じメーカーのBASICでさえ、以前のプログラムが動かないような事態も生まれた。<br />   対話型で画面に命令を入力すると即座に結果がでる仕組みになっている。<br />   インタプリタ型の代表言語で、対話形式であることとあわせて、非常に処理内容がわかりやすい。<br />   いつでもプログラムを停止して、変数値を確認したり、変更したりできた。<br />   プログラムに行番号が必要であったが、デメリットの方が大きかった。<br />   構造化された美しいプログラムを書きにくいので、広がりはあったものの、教育現場ではPascalが使われるなどの状態が生まれた。<br />   例として1から10まで加算するプログラムで仕様があいまいなため、処理系で結果が異なる例をあげていた。<br />   プレグラム例は「リバースゲーム」<br />   ビル・ゲイツとポール・アレンは1975年にインテル8080CPUで動作するBASICを開発した。これがマイクロソフト社のはじまり。その後IBMにOSとBASICを提供したのが発展のきっかけとなった。<br /> <br />  QuickBASIC<br />   プログラムの規模が大きくなるにつれ、BASICの生産性の低さが目立つようになった。<br />   MS-DOSが隆盛を極めるようになると、Turbo Pascal、Turbo Cなどがシェアを奪うようになってきた。<br />   これに対抗するためマイクロソフト社が構造化の概念を取り入れたQuickBASICを開発した。<br />   内容はBASICの命令語を採用しただけのまったく新しい言語だった。<br />   統合開発環境もつけられ、CUIの時代ではあったが、エディタ、イミディエイトウィンドウというデバッグに使える一時実行領域がついていた。ブレークポイントも設定できるし、ヘルプもついているので、いちいちマニュアルをさがさなくてよくなった。EXEファイルが生成できるようになった。<br />   例としてBASICとQuickBASICのコラッツ予想プログラムがのっていた。<br /> <br /> Visual Basic<br />   QuickBASICの後継言語としてマイクロソフト社が開発した統合開発環境。<br />   1991年に最初のバージョンが発売され(日本は未発売)それだけはMS-DOS版もある、<br />   ウィンドウ環境に対応したアプリケーションを迅速に開発するためのフォームデザイナがついた。<br />   このためユーザインターフェース部分はQuickBASICの資産は使えなかった。<br />   使いやすい統合開発環境とWindowsとの相性の良さで、それほど速度を要求されない業務システム構築の標準言語として広く使用された。<br />   簡単にフォームのレイアウトが変更できるので、プロトタイプをつくりながら開発するスタイルがとれるようになった。<br />   フォームの制御のためにオブジェクト指向がとりいれられ、言語に大きな拡張性をもたせることになった。<br />   データベースの操作に長けており、OLE準拠の追加のコントロールを購入して、画面に配置するだけで、データベース操作機能が使えるようになった。他にDAO、ADOを使うほうほうもあり、OracleやDB2にも接続できる。<br />   中間コードを利用するため、アプリケーションとは別にランライム自体のインストールが必要なため、インターネットの大量配布にはむかない。<br />   プログラム例は、QuickBASICのコラッツ予想をアレンジしたもの。<br />   <br /> Visual Basic.NET<br />   Visual Basicの後継言語。.NET Framworkとう共通プラットフォーム上で動作するアプリケーションを開発するための統合開発環境。<br />   2002年に発売されたVisual Basic.NET2002が最初で、これはVisual Studio.NETにも含まれている。<br />   表面的な命令文などはVBと似ているが、.NET Framwork対応のため内部はかなり変わっている。<br />   統合開発環境はVisual C#.NETなどと共通で利用する。<br />   Webフォームに対応している。マイクロソフト社のWebシステム開発環境Visual InerDevが統合したもの。<br />   IISで使用することでWebブラウザで表示できるビジュアルなフォームを作成する機能。<br />   VBであったVariant型は廃止された、Dim a,b as Integerの解釈は、a,bともにIntegerとなった。VBはaはVariantと解釈。<br />   GOSUBステートメント、Typeステートメントの廃止。Visual C++.NETなどと融合しやすくするため。<br />   組み込み関数がCLRのクラスやVisual Basicランタイムライブラリのメンバとして置き換えられた。<br />   そのため命令が長くなった例をあげていた。<br />   文字列の左から5文字をaにコピーする場合、VBなら a=LEFT(txtInput,5) だが、.NETだと a = Strings.Left(txtInput.Text,5)などとなる。  オブジェクト指向の厳密性が取り入れられた影響。<br />   引数の指定が省略されるとVBは参照渡し、.NETでは値渡しになる。<br />   VB6.0とは上位互換なし。<br />   手軽なプログラミング環境でなくなったが、これまでのVBの大規模開発の欠点を取り除いた言語ともいえる。<br />   サンプルはユークリッドの互除法。<br /> <br /> VIsual Basic for Application<br />   マイクロソフト社が開発したアプリケーション埋め込みようのVisual Basic。<br />   Visual Basicの言語エンジンをもとに開発、個々のアプリケーションで利用するオブジェクトにアクセスできるコンピュータ言語。<br />   1994年のExcel5.0に初めて搭載。現在はWord,PowrPint、Access、Outlook、FrontPageなどに搭載。<br />   各アプリケーションから実行できるマクロ機能として導入されている。<br />   ExcelやWordでは、ユーザの操作を補助するマクロ記録機能が装備されている。<br />   記録されたマクロはVBAのプログラムとして生成されるのでユーザが修正できる。エディタもある。<br />   プロパティの修正やフォームの作成、デバッグ機能も装備している。<br />   ブックやワークシートをオブジェクトとして操作。参照設定画面で別のアプリケーション用のライブラリを追加すると、他のアプリケーションのオブジェクトを操作することも可能。<br />   サンプルはコラッツ予想プログラム<br /> <br /> <br /> 7.7 スクリプト系<br />  Perl<br />   UNIXコマンド,rn、pachなどの作者ラリー・ウォールが開発したスクリプト。<br />   1987年、ネットワークのログを分析して報告書を自動生成するプログラムをawkで記述しようとしてうまくいかず、自分で作ったもの。<br />   ログの分析を分析、整形するという目的から、tr、grep、sed、awk、shとC言語のよいところの組み合わせで作ったという。<br />   同じしょりでも全く別のコードで記述できるほど構文が用意されている。<br />   構文に関する知識が多いほど、完結にプログラムが記述できるが、読みにくくもなるので注意が必要。<br />   最大の特徴はパターンマッチングなど、テキスト処理に優れていること。<br />   HTMLを出力するためのCGIでも広く使用されている。<br />   強力な拡張機能でシステムコールを利用できる。<br />   インタプリタ型の弱点である速度が遅い点以外は、どのような目的にでも対応できる汎用言語になった。<br />   1994年リリースのPerl5ではオブジェクト指向の概念がとりいれられた。<br />   連想配列機能=ハッシュがある。<br />   演算機能の特徴として「コンテキスト」という概念があり、演算結果として何を返すべきか自動で決定する機能。<br />   制御構文は、条件判定のif文、条件判定を逆にしたunless文、else説に記述する条件分岐elseifがある。これらのブロックはかならず{}で囲む。<br />   反復は、条件による繰り返しwhile文、初期化と更新を同時に記述できるfor文、while文の条件判定を逆さにしたuntil文、リストを順番に処理するのに適したforeach分が装備されている。繰り返し制御として、繰り返しの最後に処理を移動するnext文、ループを脱出するlast文、条件式を再評価せずに繰り返しの先頭に処理を移動するredo文がある。<br />   正規表現を用いた文字列の検索および置換が可能。<br />   正規表現を使いやすくするための、文字表現の略記法、繰り返しを細かく指定する記法が追加されている。<br />   Perl5ではリファレンス(変数のデータの登録箇所を取得できるポインタ)、パッケージ(大義した変数が見える範囲をパッケージとしてプログラマが指定できる)、モジュール(パッケージ名と同じ名前のファイル名で拡張子をPMとしたファイルに保存したもので、ある一連の処理をする関数や変数をまとめたもの)が追加。<br />   パッケージとリファレンス、bless関数を使用するとオブジェクト指向のプログラムを記述できる。<br />   bless関数は第一引数で指定されたリファレンスが、第2引数に指定されたパッケージに属するように設定する。<br />   Perlにおけるクラス定義はパッケージを作成することになる。<br />   サンプルは正規表現を使って、英数字と「_」で構成される単語の数をカウントして結果を出すプログラム。<br />    ハッシュによる文字列出現回数のカウント<br />    foreachによる配列要素の繰り返し。<br />    $_には直前の処理値が格納される。<br /> <a href="http://www.amazon.co.jp/gp/product/4873115671/ref=as_li_tf_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4873115671&linkCode=as2&tag=aaaaaaaaaaam-22">初めてのPerl 第6版</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=aaaaaaaaaaam-22&l=as2&o=9&a=4873115671" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /><br />    <br />  Python(パイソン)<br />   グイド・ヴァン・ロッサムが教育用プログラミング言語ABCとModula-3の概念を組み合わせて、設計した言語。<br />   Modula-3はPascalをつくったニコラウス・ヴィルトがPascalにモジュール機能を搭載して機能を強化したコンピュータ言語。<br />   習得のしやすさを目標にしているので、表面上の高度な機能からは考えられないほど、シンプルでわかりやすい言語仕様になっている。<br />   最初はMacintoshで動作するものだったが、Windows、Linux系OS、UNIX系OS、PalmOSなどに移植された。<br />   Tk、gtk+、Qt、MFCなどによるGUIサポートがある。<br />   標準モジュール以外でもインターネットで様々なモジュールを手に入れることができる。<br />   代表的利用例<br />    Red Hat系LinuxディストリビューションにおけるGUIを使用したインストーラおよび環境設定ツール<br />    MailMan(Web上で設定や管理が可能なメーリングリストマネージャ)<br />    ZopeとうWebアプリケーションサーバー<br />   インタプリタ型の簡易言語だが、Javaのようにバイトコードにおける異機種間での互換性あり。<br />   C言語のプログラムに埋め込んだ形での利用も可能。<br />   対話モードでの利用ができる。<br />   保存済みのソースファイルをパラメータとして利用可能なので、コマンドラインからプログラムを実行できる。<br />   多重継承できる。<br />   コードがシンプルだといわれるC言語やC++よりシンプルなコードがかける。<br />   その理由は<br />     インデントによるブロックの記述によってプログラムを簡潔にしている。<br />     辞書型やリスト型といった多機能なデータ型で複雑な処理を簡単な命令で実現できる。<br />     変数や引数における型宣言が必要ない。<br />     複数の変数に同時に値を代入できる。<br />   特徴として<br />    豊富なデータ型と正規表現<br />    インデントによるブロックの記述<br />    反復処理<br />    複数の変数への値の代入<br />    ガーベージコレクション<br />   プログラム例は配列の値を探索して検査値がみつかる場合、見つからなかった場合。<br /> <a href="http://www.amazon.co.jp/gp/product/4873113938/ref=as_li_tf_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4873113938&linkCode=as2&tag=aaaaaaaaaaam-22">初めてのPython 第3版</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=aaaaaaaaaaam-22&l=as2&o=9&a=4873113938" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /><br /> <br />   <br />  Ruby(ルビー)<br />   1995年「まつもとゆきひろ」氏が開発。<br />   PerlやPythonであきたらず、理想とするオブジェクト指向スクリプト言語を開発した。<br />   対話的に利用できるrib、PHPのようにHTMLファイルに埋め込んで利用できるeRubyなど多彩な利用方法が用意されている。<br />   インタプリタ形式で実行するオブジェクト指向のスクリプト言語。<br />   クラス定義可能、単一継承のみがサポート。<br />   多重継承の代わりにMixinというあらかじめ定義されたモジュールを取り込む機能。<br />   モジュールからメソッドを探索する方法は明確な規則が定められているため、メソッドが衝突した場合でも、問題なく動作するようになっている。<br />   ハッシュや正規表現など、すべてがオブジェクト。<br />   ハッシュは連想配列の拡張、添え字に文字列だけでなくオブジェクトを指定できる。<br />   特徴として<br />    変数の型宣言がなく、スコープの種類が命名方法できまっている。<br />    制御構造、ifやunlessが命令だけでなく修飾子としても用意されているので、文の後ろにつけると、条件が成立したとき前の文を実行する。<br />    反復ではfor...in文でオブジェクトの各要素を順番に取り出して処理を繰り返せる。<br />    timesメソッドを使用すると繰り返し回数を簡単に指定できる。<br />    メソッドにブロックを渡せるので、反復を抽象化したイテレータを実現している。最近はブロック付きメソッドと呼ばれている。<br />    マルチスレッド、マシンレベルのスレッドは使わないので、マルチスレッド機能の無いOSでも利用できる。<br />    ガーベージコレクションや例外機能もある。<br />   プログラム例は単語の数を数えて出現頻度の少ない順に表示するプログラム、単語は英数字、「_」「-」で構成される文字列。<br /> <a href="http://www.amazon.co.jp/gp/product/4873113946/ref=as_li_tf_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4873113946&linkCode=as2&tag=aaaaaaaaaaam-22">プログラミング言語 Ruby</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=aaaaaaaaaaam-22&l=as2&o=9&a=4873113946" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /><br /> <br />  PHP(ピー・エッチ・ピー)<br />   デンマークのラスマス・らーどふがホームページのアクセス分析のためにPerlを使用したCGIプログラムを記述したのが始まり、その後同僚などに使用された。<br />   CGIはシステムに負荷がかかるのでC言語で作り直した、それにHTMLのフォームを動的に作成する機能をもつFormInterpreter(FI)を組み込んだのが1995年にオープンソースとして公開されたのが「PHP/FI」<br />   Webシステム開発で使われるようになり、プロジェクトグループが開発を行うようになった。<br />   イスラエルのゼーブ・スラスキーとアンディ・ガトマンズが作り直したPHP3。<br />   PHP3は拡張性を備えた使いやすい言語だったが、記述されるスクリプトが大きくなると処理速度が遅くなるので、書きなおされたのがPHP4。<br />   2004年にリリースされたPHP5でオブジェクト指向などの機能が強化された。<br />   PHPをインストールしたWebサーバは、スクリプトを含んだWebページのリクエストを受けると、PHPのスクリプトを処理し、実行結果としてHTMLファイルを生成してクライアントに送信。WebサーバのApacheではPHPをモジュールとして組み込むことで、1回のアクセスで1つのプロセスを生成するCGIよりも高速にプログラムを実行できる。<br />   特徴として<br />    HTMLファイルに埋め込むことで動的なWebページを簡単に作成することがdきるインタプリタ型の言語。<br />    プログラムの記述と実行を繰り返し行うスタイルの開発作業が簡単で、動的なWebページを容易に開発できる。<br />    変数を宣言せず、先頭に$をつけて使用する。連想配列をサポート。<br />    制御構文は多くがC言語に似ている。<br />    文字列処理が非常に得意で正規表現可能。<br />    デバッグが簡単でエラー情報が行蛮行とともにHTML状に出力されるようになっている。<br />    データベースとの連例が非常に用意。<br />   プログラム例は九九の表をPHPで計算してHTMLで出力。<br /> <a href="http://www.amazon.co.jp/gp/product/B00BCQ5Q96/ref=as_li_tf_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B00BCQ5Q96&linkCode=as2&tag=aaaaaaaaaaam-22">Programming PHP</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=aaaaaaaaaaam-22&l=as2&o=9&a=B00BCQ5Q96" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /><br />   <br />  JavaScript<br />   Webブラウザ上でアニメーションや簡単なプログラムを実行できるようにするため、ネットスケープコミュニケーションが開発したスクリプト言語。<br />   Javaの言語エンジンとは関係ない。<br />   1996年にネットスケープコミュニケーションズ社のNetscape Navigator2.0に導入、その後マイクロソフト社のInternet Explorer3.0でもサポートされて、クライアントサイドスクリプトの標準となった。<br />   HTMLファイル内の<SCRIPT>タグで囲まれた領域にプログラムを記述することでWebページ内に動的な処理を付加できる。<br />   オブジェクト指向の考え方が導入されており、テキストボックスやボタンなどのWebページ上の各種コントロールをオブジェクトとして操作できる。<br />   各演算処理、変数や配列定義、条件分岐の機能も提供されていて、シンプルな言語仕様ながら一通りの処理は実現できる。<br />   値が数値、文字列、論理型3種類しかなく、変数がすべてVariant型。<br />   Netscape Navigator3.0とInternet Explorer4.0以降では、<A>タグにプログラムを記述することでJavaScriptを実行できるようになっている。   最大の特徴はHTMLファイルに埋め込むことができること。Webブラウザさえあれば、特別な実行環境がいらない。   ある程度の規模になるとデバッグが大変になる。   Webページを補助するスクリプトという利用方法に限定したほうがよい。   またHTMLファイルのソースがみなにみられてしまうので情報漏えいの可能性がある。   プログラム例としてWebページ上に表示された「日付表示」ボタンをクリックすると日付を表示する。 <a href="http://www.amazon.co.jp/gp/product/4873115736/ref=as_li_tf_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4873115736&linkCode=as2&tag=aaaaaaaaaaam-22">JavaScript 第6版</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=aaaaaaaaaaam-22&l=as2&o=9&a=4873115736" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />  VBScript   1999年にマイクロソフト社がWebページに埋め込むことができるWindows用のスクリプト言語として開発。   ベースはVisual Basicが採用されているが、簡易言語の色合いが強く、別の言語といえる。   クライアントWebブラウザで実行するスクリプトとして動作するが、IISのASPという拡張機能におけるスクリプト言語としても使える。   データ型はすべてVariant型。   インタプリタ型の言語なので処理速度が遅く、事前の構文チェックによって文法エラーや構文エラーなどはわからない。   Format関数やStrConv関数が装備されていないので、業務系のシステムの開発ができない。   主な用途は、HTMLに埋め込んで処理を実行させる。Windows用のスクリプトとして実行する。IISで動的にHTMLを生成する。   サンプルで「日付表示」プログラムを例に解説。   VBScriptでWebシステムを構築するメリットとして、    IISなどのWebサーバの他にはテキストエディタがあれば開発可能。    CGIではプログラムですべてのHTMLを出力していますが、VBScriptではHTML中にプログラムを埋め込むことができるため、HTMLデザインの編集が簡単になった。    マイクロソフト社のVisual InterDevを使用することでデバッグ作業を行える。    ファイルのインクルードも可能なので、汎用関数を特定のASPファイルにまとめることができる。   小規模な業務システム構築に適したコンピュータ言語。   非常に強力なのでウィルスに利用されたこともある。 <a href="http://www.amazon.co.jp/gp/product/B0096E1GNQ/ref=as_li_tf_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B0096E1GNQ&linkCode=as2&tag=aaaaaaaaaaam-22">VBScript Pocket Reference</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=aaaaaaaaaaam-22&l=as2&o=9&a=B0096E1GNQ" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />  JScript   マイクロソフト社がWebページに埋め込むことができるJavaScript互換として、Internet Explpre4.0から採用したスクリプト言語。   イメージとしてはJavaScriptの方言。   VBScriptと同様の使われ方をする。   基本的な言語仕様はJavaScriptと同じ、ファイル操作やCOMオブジェクトの操作などで機能拡張が行われている。VBScriptより速度が遅いのであまり使われない。   ASP.NETではVBScriptやJScriptは使えなくなったが、JScript.NETが新たに登場している。   プログラム例は、VBScriptやJavaScriptで取り上げたサンプルを紹介。   クライアントサイドスクリプトとしてHTMLにいれられた日付表示をするサンプル。   WindowsScriptingHost(WSH)の日付表示   サーバーサイドスクリプト(ASP)で動的にクライアントに日付を表示するHTMLファイルを生成する。 <a href="http://www.amazon.co.jp/gp/product/4873113091/ref=as_li_tf_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4873113091&linkCode=as2&tag=aaaaaaaaaaam-22">WSHクイックリファレンス 第2版</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=aaaaaaaaaaam-22&l=as2&o=9&a=4873113091" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />  Tcl/Tk(ティクル/ティケー)   インタプリタ言語のTcl(Tool Command Language)とGUI構築機能をもつライブラリであるTk(Tool Kit)から構成されている。   カリフォルニア大学バークレー校のオゥスターホゥトがIC設計用の対話的アプリケーションを開発していたが、汎用的な使用可能なコマンド言語がほしくて開発したもの。それが1988年にTclとして完成。   Tkはアップルコンピュータ社のHyperCardのようなグラフィカルな対話型アプリケーションを作成するツールを研究した勝ったスターホゥトが、代わりに細かい部品をライブラリとして提供して、組み合わせて作成するツールを考えたもの。UNIXのX Window Systemのツールキットとして提供。   このふたつがそろってつかわれることが多い。   Tclの特徴はC言語のライブラリとして実装されていること。   ターゲットのアプリケーションにリンクして実行できる。   tclshとうシェルから呼び出して実行することもできる。利用している人はこの方法が多い。   変数の代入にsetコマンドを使用。   数式を評価すうrときにexprコマンドを使用.exprは指定されたすべての引数をつないだ文字列を数式として解釈して演算子、その結果を実行結果として返すコマンド。   制御構造は条件分岐のifコマンドswitchコマンド、繰り返しのwhileコマンド、foreachコマンドなどが用意されているが、文法ではなくコマンドなので制約がある。   文字列処理のコマンドもあり、正規表現が使用できる。   連想配列も使用できる。   TkもC言語のライブラリの形で実装されているので、他のアプリケーションに取り込むことができる。   作成できるコントロールはボタン、テキストボックス、ラジオボタン、チェックボタン、メニューなどがあり、一般的なGUIのフォームを作成する機能がそろっている。   TclにTkのライブラリを呼び出すコマンドを追加するこで両者が結合される。   wishはTcl/Tkを使用するために開発されたシェル。これを使ってスクリプトでGUIのフォームを表示する例がのっていた。   プログラム例は10問の足し算に答えて、最後に結果がポップアップで表示されるもの。 <a href="http://www.amazon.co.jp/gp/product/4900900982/ref=as_li_tf_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4900900982&linkCode=as2&tag=aaaaaaaaaaam-22">Tcl/Tkデスクトップリファレンス (Programming tools)</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=aaaaaaaaaaam-22&l=as2&o=9&a=4900900982" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />  awk(オーク)   UNIXで動作する一つのツールとして開発された。   以下のUNIXコマンドを装備して、その上で数の概念を取り入れたのがawk    sort・・・行ごとに並べ替え    grep・・・指定された正規表現に照合する文字列が出現する行のみを表示    sed・・・指定されたコマンドによって文字列の置換などを行う   制御構造もあり、ツールというより言語。   現在はUNIXだけでなく、さまざまなプラットフォームで動作している。   1977年にベル研で、アルフレッド・エイホ、ブライアン・カーニハン、ピーター・ワインバーガーによってつくられたので、3人の頭文字から命名された。   1985年にユーザ定義関数、動的正規表現の機能が組み込まれた。   特徴は、テキスト処理に特化したインタプリタ言語だということ。   awkの構文は学習しやすいようにC言語に似せて作ってあるが、変数宣言やデータ型は存在しない。   テキスト処理を行うツールはデータは行単位で処理するのが一般的で、awkもそうなている。   行はレコード、空白やタブで区切られた文字列をフィールドと呼ぶ。   フィールドの数を表すNFやレコードの数を表すNRとう組み込み変数が用意されていて使用できる。   演算関数などの組み込み関数も用意されている。   ユーザが新たな関数を定義することもできる。   プログラムは基本的にパターンマッチとそれに対応する処理で構成される。   パターンの記述が省略されるとすべての行に対する処理として実行される。   BEGINとENDというパターンが用意されていて、データを読み始める前と後のアクションを記述できる。   制御構文、if for do...while whileが用意されている。記述はC言語とほぼ同じ。特殊なものとしてはfor...inで配列の添え字を順番に変数に代入する機能がある。   連想配列も使用できる。   プログラム例は連想配列を使って単語の出現頻度を調べるもの。 <a href="http://www.amazon.co.jp/gp/product/4904807006/ref=as_li_tf_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4904807006&linkCode=as2&tag=aaaaaaaaaaam-22">プログラミング言語AWK</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=aaaaaaaaaaam-22&l=as2&o=9&a=4904807006" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />  BASH(バッシュ)   Bourne Again SHellの略。   LinuxなどのOSのシェル(ユーザーと対話してコマンドの実行などを行うプログラム)として利用できる。   インタプリタ言語の実行エンジンとしても利用できる。   UNIXのシェルは他にcshやtcshがあってユーザが選択できる。   1988年ブライアン・フォックスが開発。   最初のバージョンはBシェルあるいは単にshと呼ばれた。   その後開発にチェット・レイミーが参加して、彼が今の公式管理者。   シェルプログラムの多くはシェルスクリプトという実行手順をこきこんだファイル(スクリプトファイル)を実行する機能をもっていて、BASHのスクリプト実行機能は条件分岐など、C言語と同等の機能をもつ。   特徴は、コンパイルの必要がなく開発が容易。   システムで利用できるコマンドをスクリプト内で実行できる。   内部で実行したプログラムが出力した情報を再利用したり、コマンドの実行を制御したりできる。(Perlなどは無理)サーバ用の起動スクリプトなどとして利用できる。   システムの状態が格納されている環境変数を使用することもできるので、環境に依存したスクリプトを書くことができる。   プログラム例は、使用しているOSの名前とアーキティクチャ-を表示するもの。 <a href="http://www.amazon.co.jp/gp/product/4873112540/ref=as_li_tf_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4873112540&linkCode=as2&tag=aaaaaaaaaaam-22">入門bash 第3版</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=aaaaaaaaaaam-22&l=as2&o=9&a=4873112540" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />  REXX(レックス)   IBM社が開発したスクリプト言語。   汎用機用のコマンド処理言語であるEXECを元にREXが開発され、名前をREXXにかえた。   1979年から1982年の間にマイク・カウリショウを中心に開発された。   VM/SPというOSで対話型通信を行うためのソフトCMSのコマンド処理言語として採用。   コマンド処理言語としてシステム制御するだけでなく、文字列処理と算術演算機能を備え、一般的な目的に利用することもできる。   PL/I ALGOL APLなどを参考に開発。   特徴は、変数の宣言が不要で動的な有効範囲を持つこと。   制御構造や関数を定義する構文があり、通常のプログラミング言語と同様に使える。文字列処理をはじめとする組み込み関数が充実している。   OS/2に付属して有名なシェルスクリプトになり、Windows、Linux、Mac OS Xの処理系もある。   高級言語の機能を装備したシェルスクリプト言語。   オブジェクト指向をとりいれたObject REXXも登場している。   プログラム例は、ファイルの拡張子を判断して実行するコマンドを選択するもの。 7.8 関数型言語  LISP(リスプ)   MITのジョン・マッカーシーによて1950年代の終わりに開発開始、1960年に完成。   FORTRANができて数年後のこと。   マッカーシーは人工知能が専門で、その研究用に開発された。   当時コンピュータ言語は計算が主要目的だったが、LISPではリストを扱うことができるようになっていた。   記号処理や文字列処理に適していたので、エキスパートシステムや推論システムに採用された。   人工知能言語の代名詞になった。   利用が増えるとともに方言がふえたため、1984年にComon Lispが策定された。   Prologも人工知能研究で使用されることが多いが、LISPは人工知能用の言語としては低級、Prologは高級といわれることが多い。   特徴はインタプリタ型の言語、初めての関数型言語(関数の定義だけでプログラムを記述する言語)。   変数の宣言不要。関数の引数も宣言不要。   概念さえわかれば、かっこに囲まれた複雑そうなみかけより、ずっと簡単に操作できる。   S式という特有の記述を使う、引数arg1 arg2をとる関数fooの記述はS式で(foo arag1 arg2)   プログラムもデータもS式であつかうが、データの場合は括弧の前に「'」をつける。   リストは二つのオブジェクトをコンス・セルでつないだもの、セルはデータ格納部を刺し、コンスはデータを結合しているポインタ格納部を指す。   リスト操作はcar(コンス・セルの前者をとる)とcdr(コンス・セルの後者をとる)がある。   プログラムもリスト構造で表現するので、実行時に大量のセルを消費する、不要になったセルを消去する仕組みとしてガーベージコレクションが考え出された。   関数を関数の引数として渡したり、関数の戻り値として関数をうけとることができるようになっている。   制御構造は、条件分岐のif、多重条件分岐のcondがある、反復は、カウンタ変数を増やしながら処理を繰り返すdotimes、リストで与えた値を順番に渡しながら処理を繰り返すdolist、無限ループ用のloopなどがあり、これらを利用すると実際には手続き型の記述もできる。   プログラム例は数式の微分を行うもの。 <a href="http://www.amazon.co.jp/gp/product/4873115876/ref=as_li_tf_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4873115876&linkCode=as2&tag=aaaaaaaaaaam-22">Land of Lisp</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=aaaaaaaaaaam-22&l=as2&o=9&a=4873115876" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />  Scheme   LISPの方言の一つとして生まれた。   1975年にジェラルド・サンスマンとガイ・スティールJrによって開発された。   LISPとしてはコンパクト。   研究と教育を目的に開発。あいまいさがなく、きれいに簡潔にまとめられている。   インターネットで入手可能。  Standard ML   1974年に、エディンバラ大学のロビン・ミルナーが開発。   メタ言語=言語を記述する言語。   元はEdinburgh LCFという定理照明システムの一部。   現在の代表的な処理系は、ベル研とプリンストン大学の共同研究で開発されたStandard ML for New Jersey   特徴は関数型言語で、関数を値として扱えること。   対話型のインターフェースでプログラムを記述することが可能。記述されたプログラムを読み込むのも可能。   プログラムで型を定義しなくても、型を自動的に推論し決定する「型推論」が装備されている。   関数は多相型関数(汎用性が高く、任意の型のデータを扱うことが可能な関数)、高階関数(引数として関数を受け取ったり、戻り値として関数を返すことができる)を使用できる。   研究用途だけでなく、実用的な用途にも利用可能。   Standard ML基本ライブラリを使用すると実用的なプログラムが書ける。   Windowsで、四則演算を実行する例をあげて型推論、関数の引数、戻り値などを解説。   プログラム例は、関数を引数にとる関数と、リストのパターンマッチング <a href="http://www.amazon.co.jp/gp/product/B001B0WL78/ref=as_li_tf_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B001B0WL78&linkCode=as2&tag=aaaaaaaaaaam-22">The Standard ML Basis Library</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=aaaaaaaaaaam-22&l=as2&o=9&a=B001B0WL78" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />     LOGO   1967年にMITのシーモア・ぱぱーとが開発。   タートル(亀)へ命令することができる子供向け教育用言語。   最初は亀のロボットだったが、その後コンピュータ画面で動作するようになった。   パパートの思想は、「子ども達が自分のやり方で思考の道具として成し得るようなものを他にむけて造りだすこと」、「プログラムとはタートルに新しい言葉を教えること」というもの。   自らの考えた目的を達成するためにプログラミングするとう思想。   特徴としてはインタプリタ言語。対話型実行が可能。   データ型はもたないがLISPに似た強力な関数型言語。   「forward、left、right、penup、pendown」などタートルに指示を出す命令の他に、   四則演算、べき乗、乱数、SIN、COSなどの演算命令や、分岐条件や反復の制御命令、ファイル操作命令まで用意されている。   サンプルとして日本語版LOGO「ロゴ坊」を使ってタートルで図形をかくのを解説。   サンプルでは九九の表を出力するをとりあげ、入力出力制御構造が使えるのをしめている。   LEGO MINDSTORMは子ども様なカラフルなブロックをつくっているレゴ社が販売している教育用のロボットキット。商品パッケージの側面にパパート博士のメッセージが記されている。 <a href="http://www.amazon.co.jp/gp/product/B00BMKLVJ6/ref=as_li_tf_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B00BMKLVJ6&linkCode=as2&tag=aaaaaaaaaaam-22">レゴ マインドストーム EV3 31313</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=aaaaaaaaaaam-22&l=as2&o=9&a=B00BMKLVJ6" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />    7.9 論理型言語  Prolog   1965年ロビンソンによって銃津語論理のための推論規則である導出原理発表。   導出原理は論理型言語の基になった。   1971年エディバラ大学のロバート・コワルスキーが論理式をホーン節に制限すると、論理型言語の処理効率が上がり実用的なシステムが開発できることを証明。   最初の処理系はマルセイユ大学でFORTRANで記述された。   その後、アセンブラで、そしてProlog自身で記述された処理系が登場。   それが高速だったので普及した。   特徴は    論理式を処理する論理型言語    対話型インターフェイスによるプログラミング    高度なパターンマッチング機能   プログラム例は、与えられた文章が最初に定義した文法に沿っているかを調べ、それぞれの単語の品詞を求める簡単な自然言語処理プログラム。 7.10 その他の言語  Smalltalk(スモールトーク)   1970年代初頭、ゼロックスのアラン・ケイがだれでも簡単に操作できる未来のコンピュータの姿を考え、片手で持ち運べるほどのノートパソコンで画像や音声を扱うことができ、子ども達でも簡単に利用できるものとして、Dynabookと命名。   そしてそのふぉふとウェアとしてAltoという試作機の上で暫定的環境としてSmalltalkが実装された。   AltoはCUIだったが、SmalltalkはGUIだった。   Smalltalkは環境とその上での開発言語という2つの側面をもつ。   環境としてはグラフィカルな画面の上にアイコンやウィンドウをもつ現在のGUIの基礎となるもの。   言語としては対話型インターフェースを備えたオブジェクト指向のインタプリタ言語で、LISP,LOGO,Simulaの影響をうけている。オブジェクト指向とう言葉はSmalltalkはのプログラム構造を説明するために作られた。   LOGOではコンピュータの動作を理解するのに視覚的にタートルを使ったが、それだと実現できることが限られる。   Smalltalkはタートルを一般的なオブジェクトに拡張した。   タートルに与えていた命令はオブジェクトへのメッセージ送信となる。   Simulaに装備されていたオブジェクト指向の基礎となる、クラス、継承、動的束縛の概念を取り込んだ。   1980年パークプレースシステムズからSmalltalk-80として販売された。   正当な処理系としてObjectWorks,VisualWorksと名前をかえている。   コンピュータ言語としての特徴は、すべてのデータをオブジェクトとして扱うこと。   数値や文字列など通常の言語では基本的なデータもすべtオブジェクトとして扱う。   クラスもオブジェクトとして扱う。   変数に型がない。   Smにおける演算処理はオブジェクトへのメッセージ送信になり、戻り値は必ずオブジェクトになる。   メッセージは必ず左から右へ評価される。   制御構造はブロックと呼ばれるオブジェクトを利用。   ブロックはBlockContextクラスのインスタンスでコンパイルされたSmalltalkコードのかたまり。   {}で囲まれており、その状態ではまだ評価されず、メッセージvalueを指定すると評価される。   ブロックは引数をもてる。 例 [ 3 + 5 ] value  →8と表示される。   他に制御構造の例もあげていた。   クラスの定義ができて、単一継承のみできる、メソッドは動的束縛。   Smalltalkは仮想機械の上で実行しているので、速度をあげるため実行時コード生成をおこなっている。   非常に拡張性は高いが、すべてがオブジェクトであるために学びにくい面がある。   プログラム例はSampleCircleクラスの定義  Squeak(スクイーク)   当時アップルコンピュータ社に所属していたアラン・ケイとダン・インガルスを中心とするメンバによって199年12月から開発が開始されたフリーのSmalltalk-80.   仮想機械もSmalltalkで記述されており異色性が非常に高いのが特徴。   当初Macintoshで開発されたが、その後多くのプラットフォームに移植された。   仮想機械で動くので保存されたイメージファイルはどの機種上でも実行できる。   現在はSqueak FoundationというNPOによって管理されている。   子ども達や普通のユーザーの教育用言語として開発された。   Apple版のSmalltalk-80がアセンブラで記述されたものをC言語に書きなおすことが検討されたが、面倒なのでだれもやりたがらなかった。   そこでカーネルをSmalltalkで実装、SmalltalkのサブセットをC言語に変換するトランスレータを開発。   こうして10週間で、最終的にC言語による高速なカーネルを手にいれた。   開発効率がよいのはSmalltalk自体の良さもある。   言語仕様としてはSmalltalkと全く同じなのでサンプル例もない。     FORTH   米国国立電波天文台職員のチャールズ・ムーアが観測の自動化を目的に開発。   最初の原型は1968年。   簡潔性が信頼性と拡張性につながあるという考えで設計されたもので独創的だった。   最大の特徴は、スタックにデータを格納し、逆ポーランド記法でプログラムを記述すること。   逆ポーランド記法を採用すると構文解析の必要がなく、計算処理を簡単に実装できる。   システムのコアがとても小さなプログラムで記述できる。   この利点から現在も組み込み用システムやロボット制御といったメモリ制約の多い場面で使用されている。   処理を「ワード」と呼ばれる単位で格納、ワードを集めたものを「ディクショナリ」として管理。   ユーザがワードを定義することも可能。組み込みのワードも同様に使える。   ワードで自己拡張可能なので第4世代言語と呼ばれる。   インタプリタ形式の処理系が一般的だがコンパイラもある。   逆ポーランド記法だとコンピュータのCPUに搭載されているスタック機能をうまく利用して、構文解析なく処理w実行できる解説。   構文の特徴    変数宣言→variable 変数名    変数の参照方法→ 変数名@    変数への代入→値 変数名!    条件分岐→if 処理 else 処理 then    一定回数の反復処理→終了値 開始値 do 処理 loop    条件位よる反復処理→begin 条件判断のための処理 while ループ本体 repeat   スタック操作用命令    dup スタックの先頭にある要素と同じ要素をスタックに積む    2dup スタックの先頭とその次にある要素をスタックに積む    drop スタックの先頭要素取り出し    swap スタックの先頭とその次の要素を交換。    . スタックの先頭の要素を取り出して表示。    rot スタックの底にある要素を抜き出してスタックに積む。   ワードを定義する記述があるので、何度も同じ処理を記述しなくていい。→:double dup *.;なら10doubleで100を得られる。   プログラム例はユークリッドの互除法。   ちなみにアドビのPDFで使用されているPostScriptとうページ記述言語も逆ポーランド記法で記述されるスタック処理型言語     Mind   すべての命令を日本語で記述できるコンパイラ型言語。   逆ポーランド記法で記述された命令をスタックで処理する。   1985年リギーコーポレーション社の片桐明氏によって開発。   NECのPC-9801で開発されたが、その後多くのハードウェアに対応。   Windows版やUNIX版がリリースされている。   ひらがなを無視する機構を搭載し、自然な日本語に近い記述を可能にした。   1+2 → FORTHだと 1 2 + →Mindでは 1に2を加える となる。   逆ポーランド記法は自然な日本語に近い記法。   プログラミングには時間がかかるが、Mindの記述を理解できないユーザでもおおよその中身がわかるソースコードができあがる。記述より読む方が簡単なのは大きな特徴。   特徴として    日本語の解釈は空白で区切って、先頭以外のひらがなを無視という解釈機構を使っている。    否定形の送り仮名は使えない(コンパイルエラーになる)    目的語の順番をいれかえる助詞のみ、一定の形式になるよう変換。    プログラムは単語のまとまり。    新しく単語を定義するとき→挨拶とは(改行) 「こんにちは」を 表示すること。    一般的な言語では関数定義に相当する。    実行するときには → メインとは(改行) 挨拶する。 となる。    コンパイラからはMコードとう中間コードが生成され、「ディスパッチャ」とよばれるランタイムプログラムで実行。    プログラムを別の環境で動作することができる。    現在発売されているWindows版では、Tcl/Tkのエンジンを利用することで、ウィンドウの生成やコントロールの配置などのGUI操作が可能になっている。     MindでTcl/Tkを呼び出すプログラム例。   プログラム例はコラッツ予想  Excelマクロ   マイクロソフト社の表計算ソフトExcelに搭載されていたマクロ言語。   現在のExcel2003に搭載されているのはVisual Basic for ApplicationなのでExcelマクロとは違う。   Excelにおける一連のコマンド操作を自動化するための簡易プログラミング機能のこと。   現在のExcelでも互換性のために以前のマクロを実行、修正する機能が装備されている。   特徴は、特殊なExcelシートに決められたコマンドを記述する形式で作成すること。   Excelのワークシートにユーザが行うあらゆる操作を記述することができる。   例として、D1セルを選択し、そこに=B1+C1の式を入力して薄い黄色をつけるマクロを作成修正していた。     SQL(エス・キュー・エル、シークェル)   リレーショナルデータベースの汎用的な操作言語。   1970年、IBM者のサンノゼ研究所のエドガー・F・コッドの論文で初めて提唱された。   集合論をもとにRDBの概念を提唱したもの。   同研究所で最初に開発されたRDBのSystem Rの操作言語がSEQUEL。   1976年新しいバージョンがでたときSQLに改名。   1987年、ISOとJISでSQL87の規格が策定。   1990年代にワークステーションやパソコンでRDBが動作するようになり、各社から機能拡張したRDBが発売されるようになる。   現在の多くのRDBのSQLは1992年のSQL92仕様がベース。   プログラム例としてマイクロソフト社のSQL Server 2000で動作するコラッツ予想プログラムを紹介。   拡張SQLである「Transact-SQL」で記述したストアドプロシージャ(データベースに保存することができるプログラムコード)   実行にはあらかじめIDとResultのint型のフィールドを定義したTResultテーブルが必要だと注意書きあった。    7.11 統合開発環境の種類と特徴  Visual Studio   マイクロソフト社から販売されているプログラム開発環境の統合パッケージ。   最初のバージョンは1997年出荷。Visual Basic 5.0、Visual C++5.0、Visual J++1.1、Visual InterDev1.0、Visual SourceSafe5.0が同梱されていたが、ヘルプや開発補助ツールは装備されていたものの、言語間で統合された開発環境になってはいなかった。複数言語の統一開発環境.NETのもとになった製品。   Visual InterDevはWebシステムを構築するための補助ツール。マイクロソフト社のWebサーバIISで動作するASPを利用したアプリケーションを構築できる、VBScriptやJScriptによる開発ができる、デバッグ機能がある。   Visual SourceSafeは複数プログラマによる開発を補助するツール。   Visual Studio6.0からはソフトがすべて6.0に揃えられた。 Visual Studio .NET   マイクロソフト社が提供する.NET Framworkというプラットフォーム上のアプリケーションを開発するための統合開発環境。   .NET Framworkに準拠したことにより、Visual Studioとは格言の仕様が大きく変わった。   最初のバージョンは2002年に発売。その後2003年に機能が修正されたVisual Studio.NET2003が発売。   含まれていた開発環境は、Visual Basic.NET2003、Visual C#.NET2003、Visual C++.NET2003、Visual J#.NET2003、Visual SourceSafe6.0   各言語が一つの環境に融合されたことが最大の特徴。   プロジェクトの上位にソリューションという概念を導入。   個々のプロジェクトを指定した言語で記述する単位になる。   複数プラグラマが参加するチーム開発をみすえている。   C++の一部を除いて、.NET Framework環境で動作するので、OSや機種に依存しない。   生成されるコードはMSILと呼ばれる中間コード。   Windowsでも.NET Frameworkが必要になる。   .NET Frameworkの実体は、プログラムを実行するためのエンジン部分であるCLR(共通言語ランタイム)と、ククラスライブラリ、CLRは.NET開発環境で生成される中間コードを解釈する。   .NET FrameworkではSOAPというプロトコルでXMLベースのメッセージをやりとりして、より柔軟にサービスや構造化されたデータを利用することができる。 <a href="http://www.amazon.co.jp/gp/product/B00GBK7QVE/ref=as_li_tf_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B00GBK7QVE&linkCode=as2&tag=aaaaaaaaaaam-22">Microsoft Visual Studio Professional 2013 通常版</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=aaaaaaaaaaam-22&l=as2&o=9&a=B00GBK7QVE" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> Delphi/Kylix   Delphiはボーランド社が販売しているObject Pascal(Delphi言語)の統合開発環境。   1993年Windows3.1用(16ビット)、Windows95用(32ビット)にDelpahi2が発売。   Windows用の開発環境だが、Delphi7には同等の機能を有するLinux用の開発環境Kylixを同梱。   Delphi7からは搭載言語のObject PascalがDelphi言語と改名。   Delphi8は.NET Framework対応版   Delphi2005では、Delphi7、Delphi8、C#Builderの機能を統合したもの。   Kylix3ではObject Pascalに加えてC言語とC++が使用できるようになっている。   特徴はフォームエディタを搭載した高機能なRADツールであること。   Delphiの最大の特徴は高速なコンパイルとパフォーマンスの高い実行ファイル。   生成される実行ファイルは中間コードを含まない32ビット版のWindows用のネイティブなプログラムになりランタイムなしで実行できる。   GUIのコンポーネントライブラリとしてVCLというフレームワークを提供。   .NET Framework対応Delphiでは、VCLとの高い互換性を持つVCL for .NETを提供して.NET Frameworkへの移植性を高めている。   KylixにはLinux用のCLXとうコンポーネントライブラリが提供され、WindowsとLinuxにおけるクロスプラットフォームの開発を実現。文字コードの違いがあるので完全ではない。   Delphiのデバッグ機能は、ステップ実行、トレース実行、ブレークポイント設定、関数呼び出し履歴表示、監視式の登録など高機能で使いやすい。   生成された機械語プログラムを確認しながらデバッグできるCPUウィンドウも装備されている。   命令ごとに対応するアセンブラコードだけでなく、レジスタやフラグの状態が確認できる。   業務システムだけでなく、パッケージソフトやフリーウェアなど様々なアプリケーションの開発環境として人気が高い。 <a href="http://www.amazon.co.jp/gp/product/B0000794TR/ref=as_li_tf_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B0000794TR&linkCode=as2&tag=aaaaaaaaaaam-22">Borland Delphi 7 Personal</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=aaaaaaaaaaam-22&l=as2&o=9&a=B0000794TR" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> JBuilder   ボーランド社が販売しているJavaの統合開発環境。   Windows、Macintosh、Linuxで利用できる。   1997年Windows95およびWindows NT4.0 用の開発環境として発売。   Javaが発表されたのが1995年。   この時点でJBuilder2005が最新。   特徴として、コード入力支援機能、リアルタイムにエラーを検出する機能、自動的なソースのバックアップと比較、ウィザードによる支援、モバイルアプリケーションの開発があげられていた。   JBuilder2005には個人用や学習用に無償で提供されるFuoundation版、企業の大規模開発支援のEnertprise版などがある。 <a href="http://www.amazon.co.jp/gp/product/B000TRH3J0/ref=as_li_tf_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B000TRH3J0&linkCode=as2&tag=aaaaaaaaaaam-22">JBuilder 2007 アカデミックパック1 (マルチプラットフォーム版)</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=aaaaaaaaaaam-22&l=as2&o=9&a=B000TRH3J0" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> Zend Studio   イスラエルのゼンド社が販売しているPHPによるWebシステム用の統合開発環境。   PHP3と4、それらの言語エンジンZend Engine1.0を開発したメンバ、ゼーブ、スラスキーとアンディ・ガトマンズが設立した会社で、PHP4のライセンスも同社の保有。   2004年のZend Studio3.5ではPHP4とPHP5がサポートされている。   クライアント用とサーバ用のソフトウェアが用意されている。   クライアントからWebサーバを操作してリモートでバッグができる。   クライアントだけでもデバッグできる。   開発環境内に用意されている「アウトプット領域」では、プログラムの実行にあわせて、HTMLの出力結果が随時表示される。   任意の場所にブレークポイントを置くとその時点におけるHTMLを確認できる。   ステップ実行しながら少しずつ生成されるHTMLの内容も確認できる。   停止したところの経過をWebブラウザに表示できる。   クライアント開発環境はJavaで記述されているので、プラットフォームを選ばないが、速度は遅い。 <a href="http://www.amazon.co.jp/gp/product/B0009JD95K/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B0009JD95K&linkCode=as2&tag=aaaaaaaaaaam-22">Zend Studio4.0 日本語版</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=aaaaaaaaaaam-22&l=as2&o=9&a=B0009JD95K" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> CodeWarrior   一般的なパソコンOSの他に、PDAやゲーム機のプラットフォームまで幅広い製品が提供されている。   ただし、これらの製品間でソースコードが流用できるのではなく、開発環境として共通の機能と操作性を実現しているということ。   C言語とC++が組み込まれている。   Windows用やMacintosh用のバージョンではJavaも組み込まれている。   多種の製品が存在するので特徴のところではCodeWarrior Learning Edition for Mac OSについて解説。   ひな形をステーショナリから選択するとスケルトンができて、プログラムを記述できる。   Mac OS向けにPowerPlanatとうプラットフォームがクラスライブラリとして提供されているので、Mac OS上のGUIアプリケーションを効率的に開発できる。   クラス階層ウィンドウでクラスの階層をビジュアルに確認できる。   Java用にはRADツールが装備されているので、GUIのフォームを簡単に作成できる。 <a href="http://www.amazon.co.jp/gp/product/B00005ONEG/ref=as_li_tf_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B00005ONEG&linkCode=as2&tag=aaaaaaaaaaam-22">CodeWarrior Learning Edition for Windows 日本語版 バージョン 2.0</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=aaaaaaaaaaam-22&l=as2&o=9&a=B00005ONEG" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> <!-- amazon --> <div class="sonet-asin-area"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4891004266/aaaaaaaaaaam-22/ref=nosim" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51G8XEPX1XL._SL160_.jpg" class="sonet-asin-image" alt="体系的に学ぶコンピュータ言語" title="体系的に学ぶコンピュータ言語"></a><div class="sonet-asin-info"><p class="sonet-asin-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4891004266/aaaaaaaaaaam-22/ref=nosim" target="_blank">体系的に学ぶコンピュータ言語</a></p><ul><li class="sonet-asin-label">作者: 古賀 直樹</li><li class="sonet-asin-label">出版社/メーカー: 日経BP社</li><li class="sonet-asin-label">発売日: 2004/12/25</li><li class="sonet-asin-label">メディア: 単行本</li></ul></div></div><div class="sonet-asin-break"></div> <!--/ amazon --> </a> <br clear="all" /> <div class="tag-word">タグ:<a href="http://yo-yaku.blog.so-net.ne.jp/tag/%E5%8F%A4%E8%B3%80%20%E7%9B%B4%E6%A8%B9" rel="nofollow">古賀 直樹</a> </div> <div class="bookmark" data-url="http://yo-yaku.blog.so-net.ne.jp/2014-10-17" data-subject="体系的に学ぶコンピュータ言語"></div> </div> <div class="posted"><span class="postDate">2014-10-17 12:57 </span> <a href="http://yo-yaku.blog.so-net.ne.jp/2014-10-17#favorite">nice!(1)</a>  <a href="http://yo-yaku.blog.so-net.ne.jp/2014-10-17#comments">コメント(0)</a>  <a href="http://yo-yaku.blog.so-net.ne.jp/2014-10-17#trackback">トラックバック(0)</a>  <br /><span class="postTheme">共通テーマ:</span><a href="http://blog.so-net.ne.jp/_contents/genre/0019/recent_articles/0001.html">パソコン・インターネット</a> </div> </div> <div class="articles-bottom"></div> <div class="articles-top"></div> <div class="articles"> <!-- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> <rdf:Description rdf:about="http://yo-yaku.blog.so-net.ne.jp/2014-08-24" dc:title="ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか" dc:identifier="http://yo-yaku.blog.so-net.ne.jp/2014-08-24" dc:description="すっごく細かい話を、すっごくわかりにくいテクニックで解くプログラミングの本。 どう使っていいのかもはやよくわからないが、 「へえー」っとなるプログラミングを集めたもの。 半分は数学みたいだった。 1序論 表記の法則が書かれていた。 Cの式評価優先順位とコンピュータ代数、その説明の一覧がついていた。 命令セットと実行時間モデルは、汎用RISCコンピュータの命令セットに似た命令セット備えたマシン用と考える。 基本RISC命令セット、Opcode簡略表記、オペランド、説明の.." dc:creator="よよ" dc:subject="プログラミング" dc:date="2014-08-24T17:03:24+09:00" /> </rdf:RDF> --> <h2 class="articles-title"><a href="http://yo-yaku.blog.so-net.ne.jp/2014-08-24">ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか</a> <a href="http://yo-yaku.blog.so-net.ne.jp/archive/c2300515359-1">[プログラミング]</a></h2> <div class="articles-body"> すっごく細かい話を、すっごくわかりにくいテクニックで解くプログラミングの本。<br /> <br /> どう使っていいのかもはやよくわからないが、<br /> <br /> 「へえー」っとなるプログラミングを集めたもの。<br /> <br /> 半分は数学みたいだった。<br /> <br /> 1序論<br /> 表記の法則が書かれていた。<br /> Cの式評価優先順位とコンピュータ代数、その説明の一覧がついていた。<br /> 命令セットと実行時間モデルは、汎用RISCコンピュータの命令セットに似た命令セット備えたマシン用と考える。<br /> 基本RISC命令セット、Opcode簡略表記、オペランド、説明の一覧<br /> 同様の表記で「完全RISC」で追加される命令<br /> 実行時間は城山、除算、剰余意外のすべての命令は1サイクルで実行されると仮定し、乗算等には特別な時間を仮定しない。<br /> 分岐命令は分岐するにせよ、しないにせよ、1サイクルかかるとする。<br /> <br /> 2基本操作として<br /> ・右端のビット操作いろいろ、x&(x-1)だと1ワードで最右の1のビットをオフにするなど、いろいろな方法が示されている。<br /> ・論理演算と組み合わせた加算、-x=¬x+1とか<br /> ・論理式と算術式での不等式、符号なし整数と解釈される値を持つ2進論理式の不等式の例<br /> ・絶対値整数、マシンに命令がないなら、3つまたは4つの命令で分岐不要で行える。<br /> ・符号の拡張、1ワードの中にあるビット位置を符号ビットと考えて、それが、その他のビットの存在は無視して左に伝播すること。<br /> ・符号なしあkら符号付右シフトをつくる方法、マシンにsift right signed命令が無い場合。<br /> ・符号(sign)関数、ほとんどのマシンで4命令<br /> ・三つの値を持つ比較関数、sighnを少し一般化したもの。<br /> ・符号の移送、FortoranでISIGNとされるもの、ほとんどのマシンで4命令<br /> ・Zero Means 2**nフィールドのでコード、0または負の値が数量として何の意味も持たない場合、0の値を持つnびっとフィールドを2^Nとみなして0以外の値は通常の2進数としてエンコードする。<br /> ・比較述語、二つの量を比較する関数、比較が真なら1、偽なら0の単一ビットを生成。評価結果をふごういちにいれる分岐不要の式の例<br /> ・オーバーフローの検出、算術結果をターゲットレジスタで正確に表すには大きすぎるかまたは小さすぎることをいう。発生したときに状況ビットを使用することなくプログラマが検出するのに利用できる方法を検討<br /> ・add subtract multiplyの状況コードの結果、マシンの多くが状況コードを提供している。<br /> ・循環シフト、0-32の値域のnについてシフトがmod32の場合でもなりたつ。<br /> ・2倍長のadd/subtract、符号なしの加算と原産のオーバーフローの式の一つを使い、マシンのキャリービットにアクセスすることなく、2倍長の加算と減算を容易に実装する方法。<br /> ・2倍長のシフト、32ビットワードの対と考える<br /> ・他バイトのadd subtract 絶対値、1ワードで操作するとたいていはもっと早く実行できる。<br /> ・doz(difference or zero) max min dozでは多く引きすぎると結果が0になる。これをminとmaxの実装に使える。<br /> ・レジスタ交換、二つのレジスタの内容を3番目のレジスタを使わずに交換する方法<br /> ・二つ以上の値の交換、変数xは二つの値a,bだけを持つことができ、現在の値でないもう一方の値をxに代入したいが、コードがa、bの値から独立したい場合のコード<br /> <br /> 3 2のべき乗の境界<br /> ・符号なし整数を次に小さい8の倍数へ切り上げる、切り下げる。符号付整数で行う。符号付整数を0の方向に向かってもっとも近い8の倍数に丸めるなど。<br /> ・もっとも近い整数の代わりにもっとも近い2の整数乗に向かって丸める、floorやdeilingに似た関数を定義。<br /> ・2のべき乗の境界越えの検出。記憶域がアドレス0から2のべき乗のサイズのブロックに分割されているとして、境界越えを検出。<br /> <br /> 4 算術的な境界<br /> ・整数の境界の検査。整数xが富津の境界aとbの間にあることの検証。符号なし、符号付で検証。<br /> ・加算や減算による境界の伝播。最適化コンパイラが行う式の「範囲解析」。<br /> ・論理演算による境界の伝播。上と同じ変数の境界が与えられているとして符号なしで検証。符号付は途中まで。<br /> <br /> 5 ビットの数え上げ<br /> ・1のビットの数え上げ。IBM Stretchではワード中の1ビットや0ビットの個数を数えられた。この命令がないマシンでは2ビットごとに区切った各フィールドにもともとそこにあった二つのビットの和をセットし、その次に隣接する2ビットのフィールドの和を求め、その結果を4ビットの各フィールドにセットするを繰り返す。→分割統治という戦略。1ビットが少ないワード、配列の方法も解説。<br /> ・パリティ。ワードのパリティ計算。7ビット量にパリティビットを付加する。<br /> ・先頭から続く0を数える。二分木探索を用いて先頭から続く0を数える方法。右に伝播させる方法など。<br /> ・末尾へ続く0を数える。上と同じ問題に転換してしまうとよい。<br /> <br /> 6 ワードの探索<br /> ・最初の0バイトの検出。Cのストリング表現は明示的な長さを持たない。末尾は0。長さを知る関数strlenの高速版をつくるには、ワード境界まで1バイトづつロードして検査、境界に達したらワード単位でレジスタにロードし、その中に0倍とが含まれているか調べる。単純な検査、分岐不要コード、nlzを用いない最左の0バイト検出、多項式の評価による最左の0バイト検出方法など。<br /> ・指定された長さを持つ最初の1のビット列の検出。shifとandを用いた例<br /> <br /> 7 ビットやバイト単位の並べ替え<br /> ・ビットやバイトの逆転、リトルエンディアンとビッグエンディアン形式でのデータ交換操作に必須。<br /> ・ビットのシャッフル。暗号化に応用できる。外側完全シャッフル演算など解説。<br /> ・ビット行列の転置。行と列の転換。8×8行列、32×32行列の転置例解説。<br /> ・圧縮あるいは一般化された抽出。extract命令への類推からそう呼ばれる。APL言語のcompress演算と同じ。<br /> ・一般的順列あるいは「羊と山羊」演算。順列を表現する方法を検討。<br /> ・並べ替えと添え字変換。配列の要素数がコンピュータのワードかそれ以上の場合に有益。<br /> <br /> 8 乗算<br /> ・多倍長乗算。筆算の方法でおこなうより、部分関野配列を展開するより、それぞれの新しい行を計算しながら積になる行に加えていくほうが効果的。<br /> ・64ビット積の上位32ビット。32ビット整数の積の上位32ビットを計算する問題を考える。<br /> ・積の上位半分の符号付と符号なしの間の変換。<br /> ・定数の乗算。sift、left, addの連続で定数の乗算が行える。<br /> <br /> 9 整数除算<br /> ・この章と次の章でコンピュータの除算に関する秘訣とアルゴリズムを与える。式の定義、使う定理について定義。<br /> ・多倍長除算。伝統的筆算の方法でできるが複雑。クヌースのアルゴリズムDwoCでコーディングしたものの例。<br /> ・符号付の除算から符号なしのshort除算へ。short除算は1ワード同士の除算。符号付のlong除算を使う方法。符号付のshort除算を使う方法。<br /> ・符号なしのlong除算。long除算はダブルワードを単独のワードで割る除算を表すことにする。0で割った場合を含むオーバーフローの結果は不定。ハードウェアのshift-and-subtractアルゴリズムを使う方法、short除算を使う方法解説。<br /> <br /> 10 整数定数による除算<br /> 多くのコンピュータで除算は非常に時間がかかるので可能なら避けるべき。除数が定数のときdivide命令をさける方法。<br /> ・2のべき乗による符号付除算、shirf right asigned をkビット行うと、数値を2のk乗で割れると仮定するのは過ち。<br /> ・2のべき乗による除算の符号付剰余。計算方法解説。<br /> ・2のべき乗以外での符号付除算と剰余。基本となる秘訣は、およそ2の32乗/dであるような、除数dの逆数の1種をかけて、咳の左32ビットを取り出す。もうすこし複雑なので例(3、7の除算)で解説。<br /> ・除数が2以上の符号付除算。上の例のなかで3つの例があるだけとして、説明。<br /> ・除数が-2以下の符号付除算。いったん他の例におきかえて商をマイナスにする方法を解説。<br /> ・コンパイラへの組み込み。コンパイラが定数による除算を乗算にかえる方法解説。<br /> ・その他の話題。他の定理の証明など。<br /> ・符号なし除算。2のべき乗による符号なし除算は、単一のshift right logical命令で実装でき、剰余はand immediateで命令できる。3、7の例。<br /> ・除数が1以上の符号なし除算解説。<br /> ・コンパイラへの組み込み。(符号なし)ここでの証明で使った式は実行に困難。キーポイントを解説。<br /> ・その他の話題(符号なし)。符号なしの場合のその他の定理について解説。<br /> ・modulusおよびfloor除算への応用、非定数が負なら1加えるステップを省略する方法ではうまくいかない。<br /> ・類似した方法、magicアルゴリズムをコーディングする代わりに、いくつかの小さい除数についてマジックナンバーとシフト量を与える表を用意する方法。<br /> ・マジックナンバーのサンプル、W=32とW=64の表。<br /> ・定数による整除算。整除算=事前に何らかの方法で剰余が0とわかっている除算。定理で解説。ユークリッドのアルゴリズムによる乗法の逆元の計算、ニュートン法による乗法の逆元の計算を使用して解説。<br /> ・定数による除算後に剰余が0か調べる。除数dの乗法の逆元を使う。<br /> <br /> 11 いくつかの初等関数<br /> ・整数平方根。符号なし。ニュートン法による解説。初期近似値を二分探索。ハードウェアのアルゴリズム解説。<br /> ・整数立方根。ニュートン法はあまり効果なし。ハードウェアのアルゴリズム解説。<br /> ・整数乗。nの2進数分解法によるxのn乗の計算。<br /> ・整数対数。logの計算。底2と10の例。単純なテーブル検索、10の繰り返し乗算。修正版二分探索。底2の対数から底10の整数対数への変換(2つのテーブル検索などいろんな方法で)<br /> <br /> 12 数の表現のための一風変わった基数<br /> 実用的でhあないが、面白い数の位取りの表現についての議論。<br /> ・-2進数。明示的な符号や、その他の最上位ビットに負の重みをもたせるような不規則なものを用いることなしに、不でもせいでも整数を表すことができる。<br /> ・-1+i進数。すべての複素整数を明示的な符号やその他の変則的なことなしに、一つの数として表すことができる。<br /> ・その他の基数について解説。<br /> ・どれか最も効率的な基数か?ここの計算では2進表現はe進表現より焼く1.0632倍コスト高としていた。<br /> <br /> 13 グレイコード<br /> ・グレイコード・・・nビットから成る数を一度に1ビット変えていくだけで2のn乗すべての組み合わせを循環的に表す。これがグレイコードの性質。グレイコード化された整数とその次の整数とで1ビットだけが異なるコード化の方法。<br /> この概念は10進数などの任意の基数に対して応用できるように一般化可能。ここでは、2進数のグレイコードについてのみ議論。<br /> その中でも反射2進グレイコードについてのみ議論。<br /> ・グレイコード化された整数のインクリメント<br /> ・-2進のグレイコード<br /> ・簡単な歴史と応用。ベル研究所のフランク・グレイにちなんで命名された、位置センサーに使われている。<br /> <br /> 14 ヒルベルト曲線<br /> ペアノは平面曲線で「平面空間を充填する(うめつくす)」という、驚くべき特性を有するものを発見。これは基数3の小数を使って証明できる。<br /> ヒルベルトはペアノ曲線の一つの変種を発見。正方形の各々の辺を2等分し、もとの正方形を4つの小さな正方形に分割。そしてそれがさらにちいさな4つの正方形に分割と続く。その分割の各々の段階で正方形をたどる曲線を与える、これがペアノーヒルベルト曲線。ヒルベルト曲線は分割処理の極限の曲線。ヒルベルト曲線は基数2の小数、つまり2進小数で説明できる。<br /> ここでは次数nのヒルベルト曲線をその曲線列のうちのn番目の曲線と意味して使う。<br /> ・ヒルベルト曲線を生成する再帰的アルゴリズムを考える。<br /> ・ヒルベルト曲線の道のりから座標を求める方法解説。<br /> ・ヒルベルト曲線上の座標の距離を求める方法解説。<br /> ・ヒルベルト曲線の座標のインクリメント方法解説。<br /> ・非再帰型の生成アルゴリズム<br /> ・その他の空間充填曲線解説。<br /> ・応用。空間充填曲線は圧縮やハーフトーン化、テクスチャ解析といった画像処理へ応用できる。<br /> <br /> 15 浮動小数点<br /> 整数演算と論理演算を使った浮動小数点数値の操作の提案はIEEE算術としてしられているが美しくない。<br /> ・IEEE規格の解説。単精度と倍精度形式に限定して。<br /> ・整数演算を用いた浮動小数点数値の比較。非数でない数値ではそれを符号と大きさを持った整数とみなしたとき正しく順序づけられる。<br /> ・先頭桁の分布。なんか先頭桁が1の割合について考えているようだ、指数フィールドを大きくとりすぎるとかなんとか。<br /> ・種々の数値一覧。正確でない値は表現可能なもっとも近い数に丸められている。ー極大とか。<br /> <br /> 16 素数に関する式<br /> ・素数に関する式の歴史からハイライトを復習。フェルマとか。<br /> ・ウィランズの式、n番目の素数を求める。<br /> ・ウォーメルの式、ウィランズの式を改良して三角関数とfloor関数を取り除いた。原理的には整数演算だけを使う簡単なコンピュータプログラムで計算可能。<br /> ・その他の面倒な関数を表す式。<br /> <br /> 付録A 4ビットマシンのための算術表<br /> 加算、減算(行一列)、符号付乗算、符号なし乗算、符号付short除算(行÷列)、符号なしshort除算(行÷列)、符号付short除算の剰余(行÷列)、符号なしshort除算の剰余(行÷列)<br /> <br /> 付録B ニュートン法<br /> 手短な解説。<br /> <br /> <!-- amazon --><br /> <div class="sonet-asin-area"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4434046683/aaaaaaaaaaam-22/ref=nosim" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41DYYQAGRDL._SL160_.jpg" class="sonet-asin-image" alt="ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか" title="ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか"></a><div class="sonet-asin-info"><p class="sonet-asin-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4434046683/aaaaaaaaaaam-22/ref=nosim" target="_blank">ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか</a></p><ul><li class="sonet-asin-label">作者: ジュニア,ヘンリー・S. ウォーレン</li><li class="sonet-asin-label">出版社/メーカー: エスアイビーアクセス</li><li class="sonet-asin-label">発売日: 2004/09</li><li class="sonet-asin-label">メディア: 単行本</li></ul></div></div><div class="sonet-asin-break"></div><br /> <!--/ amazon --><br /> <br /> <center> <a href="http://px.a8.net/svt/ejp?a8mat=2HHJ21+4RH84A+2OGI+5YRHD" target="_blank"> <img border="0" width="468" height="60" alt="" src="http://www28.a8.net/svt/bgt?aid=150303673288&wid=018&eno=01&mid=s00000012501001002000&mc=1"></a> <img border="0" width="1" height="1" src="http://www17.a8.net/0.gif?a8mat=2HHJ21+4RH84A+2OGI+5YRHD" alt=""> </center> <br clear="all" /> <div class="tag-word">タグ:<a href="http://yo-yaku.blog.so-net.ne.jp/tag/%E3%82%B8%E3%83%A5%E3%83%8B%E3%82%A2%2C%E3%83%98%E3%83%B3%E3%83%AA%E3%83%BC%E3%83%BBS.%20%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AC%E3%83%B3" rel="nofollow">ジュニア,ヘンリー・S. ウォーレン</a> </div> <div class="bookmark" data-url="http://yo-yaku.blog.so-net.ne.jp/2014-08-24" data-subject="ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか"></div> </div> <div class="posted"><span class="postDate">2014-08-24 17:03 </span> <a href="http://yo-yaku.blog.so-net.ne.jp/2014-08-24#favorite">nice!(1)</a>  <a href="http://yo-yaku.blog.so-net.ne.jp/2014-08-24#comments">コメント(0)</a>  <a href="http://yo-yaku.blog.so-net.ne.jp/2014-08-24#trackback">トラックバック(0)</a>  <br /><span class="postTheme">共通テーマ:</span><a href="http://blog.so-net.ne.jp/_contents/genre/0013/recent_articles/0001.html">本</a> </div> </div> <div class="articles-bottom"></div> <div class="articles-top"></div> <div class="articles"> <!-- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> <rdf:Description rdf:about="http://yo-yaku.blog.so-net.ne.jp/2014-07-28" dc:title="今すぐ使えるかんたんmini Windows7基本技" dc:identifier="http://yo-yaku.blog.so-net.ne.jp/2014-07-28" dc:description="見開き2ページ(時には数ページ使って)で1セクション機能を解説。 セクション名は具体的な作業で、解説と、やり方が番号順にのっている。 画面の該当箇所が拡大されてのっているのでわかりやすい。 最後にはメモやヒントが解説されている。 全部で64セクション。 第1章 Windows7の基本  Section01 Windows7とは・・・OSとはコンピュータを使う上で必要不可欠なソフト。Windows7は歴代のWindowsで7番目の家庭向けOS.動作すするパソコンは、CPU 1.." dc:creator="よよ" dc:subject="プログラミング" dc:date="2014-07-28T00:44:10+09:00" /> </rdf:RDF> --> <h2 class="articles-title"><a href="http://yo-yaku.blog.so-net.ne.jp/2014-07-28">今すぐ使えるかんたんmini Windows7基本技</a> <a href="http://yo-yaku.blog.so-net.ne.jp/archive/c2300515359-1">[プログラミング]</a></h2> <div class="articles-body"> 見開き2ページ(時には数ページ使って)で1セクション機能を解説。<br /> セクション名は具体的な作業で、解説と、やり方が番号順にのっている。<br /> 画面の該当箇所が拡大されてのっているのでわかりやすい。<br /> 最後にはメモやヒントが解説されている。<br /> 全部で64セクション。<br /> <br /> 第1章 Windows7の基本 <br /> Section01 Windows7とは・・・OSとはコンピュータを使う上で必要不可欠なソフト。Windows7は歴代のWindowsで7番目の家庭向けOS.動作すするパソコンは、CPU 1GH以上、メモリ32ビットなら1GB以上、64ビットなら2GB以上、ハードディスク32ビットなら16GB、64ビットなら20GB以上、ビデオカードはWDDM1.0以上のドライバーを搭載しDirectX9対応のもの。<br /> <br /> Section02 Windows7n種類・・・<br /> 下位エディション→上位エディション<br /> Stater(ネットブック向け)、HomePremium(家庭向け)、Professional(ビジネス・上級者向け)、Ultimate(全機能)<br /> EnterPriseは企業向け、HomeBasicは日本で発売されない。<br /> <br /> Section03 Windows7の起動と終了・・・電源をいれると起動、パスワードを入力するとデスクトップが表示される。終了は「スタートボタン」をクリックし、シャットダウンを選択すると電源が切れる。シャットダウン以外にも、ロック=ユーザ選択画面、スリープ=消費電力を著しく抑えた状態もある。<br /> <br /> Section04 Windows7の画面構成・・・デスクトップの名称と役割。言語バーをタスクバーに格納するには、クリックしてドロップする。元に戻すとkには見美クリックして「言語バーの復元」を選ぶ。<br /> <br /> Seciton05 スタートメニューを表示する・・・作業を開始するとき利用。メニューから目的の項目を選ぶ。上にはよく使うアプリケーションが表示されていて、右側にはWindows7の機能が表示されている。閉じるにはデスクトップの何もないところを押すか、Escキーを押す。<br /> <br /> Section06 アプリケーションの起動と終了・・・スタートメニューからソリティアを起動するのを例に解説。終了時にはタイトルバーの×ボタンをクリック、またはメニューからアプリケーションの終了を選択。<br /> <br /> Section07 ウィンドウの基本操作・・・サイズ変更方法、タスクバーからウィンドウを開く方法、ウィンドウの移動、アクティブウィンドウの切り替え解説。<br /> <br /> Section08  文字入力・・・ワードパットで解説。IMEパッドで直接文字を入力する方法も解説。<br /> <br /> Seciton09 タスクバーの基本操作・・・タスクバーのアイコンはアプリケーションの状況によって色が変化。起動ちゅのアプリケーションのアイコンを右クリックして「託すバーにこのプログラムを表示する」を選ぶと、アプリケーションを終了した後もアイコンが常に表示されるようになる。タスクバーのプロパティでアイコンを小さくできる。<br /> <br /> <br /> 第2章 ファイルとフォルダーの基本操作 <br /> <br /> Section10 ファイルとフォルダーを知る・・・様々なデータをファイルと呼ばれる単位で管理。ファイルのアイコンの解説。フォルダーとはファイルを分類して管理するとき使用される保管場所。フォルダーの中にフォルダーをつくることもできる。<br /> <br /> Section11 エクスプローラーの基本操作・・・フォルダーやファイルを表示するにはエクスプローラーと呼ばれるウィンドウを使う。エクスプローラーの画面構成とフォルダーの内容を表示する方法を解説。フォルダーをお気に入りにドラッグ&ドロップすると独自のお気に入りを登録できる。アドレスバーをクリックすると現在のフォルダーがパス名で表示される。<br /> <br /> Section12 フォルダーを表示する・・・ダブルクリックと右クリックメニュー二つの方法を解説。<br /> <br /> Section13 ファイルを作成する・・・ワードパットで文章を作成して保存する方法で解説。<br /> <br /> Seciton14 フォルダーを作成する・・・「新フォルダー」をクリックしてフォルダーを作成し、名前をつける方法を解説。<br /> <br /> Seciton15 フォルダーの名前を変更する・・・名前を変更するフォルダーをクリックし、メニューの「整理」をクリック、「名前の変更」をクリック。名前を入力。<br /> <br /> Seciton16 フォルダーやファイルの移動とコピー・・・ドラッグドロップで移動する方法、メニューの「整理」を使ってコピーする方法を解説。<br /> <br /> Section17 フォルダーやファイルを削除する・・・メニューの「整理」を使って削除する。こうするとフォルダーがゴミ箱に移動する。ゴミ箱を空にすると完全に削除される。<br /> <br /> Section18 フォルダーやファイルの表示方法を変更する・・・「中アイコン」から「大アイコン」に変更する方法を解説。<br /> <br /> Section19 ライブラリの基本操作・・・ライブラリはエクスプローラーのナビゲーションウィンドウに準備されたカテゴリ。新しく作って、一括管理したフォルダーを登録することができる。<br /> <br /> Section20 新しいライブラリを作成する・・・メニューの「新しいライブラリ」で作成する方法を解説。<br /> <br /> Section21 ライブラリにフォルダーを使いかする・・・ライブラリを開き「フォルダーを追加」から行う方法を解説。<br /> <br /> Section22 ふぁるだー内のファイルを検索する・・・スタートメニューの検索ボックスから探す方法を解説。エクスプローラーの検索ボックスで探す方法を解説。違いはエクスプローラ-なら場所まで表示されること。<br /> <br /> Section23 ファイルを種類ごとに分類する・・・画面右上の「フォルダー」をクリックして種類で並べ替える方法を解説。同じく名前順で並べ替える方法を解説。<br /> <br /> <br /> <br /> 第3章 インターネットの活用 <br /> <br /> Section24 インターネットとは・・・世界中のコンピュータまたはコンピュータネットワークを相互に接続している通信網。Internet Explorer8(IE8)とは、Webブラウザー、IE8の画面構成を解説。<br /> <br /> Section25 Internet Explorerを起動する・・・初めてIE8を起動する場合はタスクバーのアイコンをクリックして起動。セットアプ方法、終了方法解説。<br /> <br /> Section26 Webページを表示する・・・アドレスバーにURLを入力するか、表示中のハイパーリンクをたどる。<br /> <br /> Section27 見たいWebページを検索する・・・IE8の右上にあるディフォルトのクイック検索ボックスで検索する方法を解説。<br /> <br /> Section28 よく見るWebページを登録する・・・「お気に入り」に登録する方法を解説。<br /> <br /> Section29 最初に表示するホームページを登録する・・・「ホーム」の下矢印をクリックして、「ホームページの追加と変更」をクリックし、一つのWebページを登録する方法を解説。複数のWebページをホームページに登録する場合も同様。<br /> <br /> Section30 過去に見たWebページを表示する・・・IE8ではディフォルトで過去20日間の履歴が保存される。お気に入りの履歴から検索できる。履歴は「セーフティ」から削除できる。<br /> <br /> Seciton31 Webページを上手に印刷する・・・メニューの「印刷」の下ボタンをクリックしてプレビューで確認。<br /> <br /> Section32 クイック検索をGoogleに変更する・・・初期値はマイクロソフトのBing。検索ボックス横の下矢印ボタンをクリック、アドオンギャラリーが開くので「検索プロバイダーを作成する」をクリックして、アドレスバーにGoogleのURLをいれてTESTと入力して検索をおこない、そのURLをアドレスバーからコピーして、「検索プロバイダーを作成する」タブをクリックして戻りURLにいれる。<br /> <br /> Seciton33 Webページからファイルをダウンロードする・・・Webページを開き、メニューのダウンロードを選んでダウンロードする方法を解説。警告メッセージが表示されるときには消してから。<br /> <br /> <br /> 第4章 写真・動画・音楽の活用 <br /> Section34 デジタルカメラの写真をパソコンに保存・・・接続すると「自動再生」ダイアログボックスが表示されうので、「画像とビデオの読み込み」をクリックして読み込む。<br /> <br /> Section35 保存した写真を表示する・・・ナビゲーションウィンドウの「ピクチャ」を使う方法解説。Windowsフォトビューアーの操作方法解説。<br /> <br /> Section36 写真を印刷する・・・ピクチャライブラリで印刷したい写真をクリックしてメニューから「印刷」をクリックする方法を解説。一枚の用紙に複数の写真を印刷するときには、「画像の印刷」ダイアログで「レイアウトの選択」を行う。<br /> <br /> Seciton37 写真をスライドショーで見る・・・再生したいフォルダーをダブルクリックし、メニューの「スライドショー」を選択。終了したいときには画面の適当なところを右クリックして「終了」を選ぶ。<br /> <br /> Section38 Windows Media Playerとは・・・スタートメニューからWindowsMediaPlayer12を起動。画面構成の解説。<br /> <br /> Section39 パソコンにビデオ映像を取り込む・・・デジタルビデオカメラをパソコンに接続。「自動再生」ダイアログボックスが表示されたら、「画像とビデオの読み込み」をクリック。<br /> <br /> Section40 動画を再生する・・・WindowsMediaPlayer12でビデオを再生する方法。<br /> <br /> Section41 音楽CDを再生する・・・WindowsMediaPlayer12で音楽CDを再生する方法を解説。<br /> <br /> Section42 パソコンに音楽CDをとりこむ・・WindowsMediaPlayer12を起動してプレイビューモードを表示。CDを挿入して、右上の「CDの取り込み」をクリック。<br /> <br /> Section43 好きな曲だけを集めた再生リストを作成する・・・WindowsMediaPlayer12のリストウィンドウを開き、リストウィンドウに登録して再生リストを保存。<br /> <br /> Section44 CD/DVDに写真を保存する・・・何もかかれていないCD-RをCD/DVDドライブにセット。「自動再生」ダイアログボックスで「ファイルをディスクに書き込む」をクリック。対象ファイルを選んで書き込み、その後おファイルを確認する方法を解説。<br /> <br /> <br /> 第5章 Windows7の活用 <br /> Section45 コントロールパネルを表示する・・・スタートメニューから「コントロールパネル」を表示する方法を解説。コントロールパネルの分類と設定項目が一覧になっていた。<br /> <br /> Section46 デスクトップの配色やデザイン変更・・・Windows7ではテーマ機能が強化されたので、配色や背景をまとめて変更できる。コントロールパネルの「テーマの変更」をクリックして「個人設定」ウィンドウから、「デスクトップの背景」をクリックして変更。複数の背景を一定時間で切り替えるには、Ctrlキーを押しながら2つ以上の画像をクリック。<br /> <br /> Section47 ガジェットを追加する・・・ガジェットとは時計やカレンダー、天気予報などのちょっとしたことに利用できるアプリケーション。デスクトップの何もないところを右クリックして追加する方法を解説。 <br /> <br /> Section48 アカウントにパスワードを設定する・・・コントロールパネルの「ユーザアカウントの追加または削除」をクリック、パスワードを設定したいアカウントをクリックして設定。「アカウントの変更」ウィンドウに戻るとアカウントに「パスワードの保護」と表示される。<br /> <br /> Section49 複数のユーザーで一台のパソコンを使う・・・利用したい人数分のアカウントを作成する。コントロールパネルから作成する方法を解説。作成したユーザアカウントでログインしたり、スタートメニューからユーザを切り替える方法を解説。<br /> <br /> Section50 コンピュータなどをデスクトップに表示する・・・コントロールパネルの「テーマの変更」から「デスクトップアイコンの変更」を選択。デスクトップに表示したいアイコンにチェックをいれる。<br /> <br /> Section51 スタートメニューの順序を変更・・・スタートを右クリックして「プロパティ」を選択、タスクバーとスタートメニューのプロパティがあるので、「カスタマイズ」をクリックして変更。<br /> <br /> Section52 ウィンドウのサイズを変更する・・・WindowsAeroを使ってウィンドウサイズをすばやく好みの大きさに変更する方法を解説。<br />  <br /> Section53 Webページやフォルダーをすばやく利用・・・ジャンプリストを利用する方法を解説。Webページをジャンプリストに登録するにはタスクバーのIE8のアイコンを右クリックして登録したWebページにマウスポインタをあわせ、ピンが表示されたらクリック。フォルダーの場合はフォルダーをドラックしてタスクバーのエクスプローラーにドロップ。<br /> <br /> Section54 複数のウィンドウを素早く最小化する・・・Aeroシェイク(残すウィンドウのタイトルバーをつかんでシェイク)の方法と、それをもとにもどすには、同じことをする。<br /> <br /> Section55 ファイルを圧縮・展開する・・・圧縮したいファイルを保存しているフォルダーを開き、圧縮したファイルを選択して右クリック、メニューから「送る」→「圧縮(zip形式)」を選択。作成された圧縮フォルダーはもとの場所に作成される。圧縮ファイルを展開するには、展開するファイルを右クリックして「すべて展開」をクリック。<br /> <br /> Section56 USBメモリーを利用する・・・USBメモリーは何度でもデータの読み書きができて、コンパクトで持ち運びやすい。パソコンのUSBポートにUSBメモリーを接続すると、「自動再生ダイアログ」が表示されるので「フォルダーを開いてファイルを表示」を選ぶ。データを保存したいときにはドラッグ&ドロップを使う。取り外すときには、スタートメニューのコンピュータから外すUSBメモリーを選んでメニューの「取り出す」をクリック。<br /> <br /> Section57 事項再生の設定を変更する・・・コントロールパネルの「ハードウェアとサウンド」をクリック、「自動再生」を選択し、設定を変更したいメディアの下矢印をクリックして変更して保存。すべの自動再生を無効にすることもできる。<br /> <br /> <br /> <br /> 第6章 トラブル解決の基本<br /> <br /> Section58 日本語入力中に日本語が入力できなくなった・・・代表的な対処方法を紹介。入力モード確認。IMEの設定を初期値にする。パソコン再起動。<br /> <br /> Section59 ダブルクリックして起動するアプリケーションが変わった・・・コントロールパネルの「プログラム」をクリック、「あるファイルの種類を特定のプログラムでオープンをクリック、関連付けを変更したいファイルの拡張子をクリックして「プログラムの変更」をクリック、関連付けしたいプログラムを選んでOKをクリック。関連づけたいプログラムが無い場合、「参照」で探す。<br /> <br /> Section60 パソコンが固まった・・・フリーズの症状を確認するフローチャートがあた。対処法のひとつとしてタスクマネージャーを使ったアプリケーションの矯正終了方法を解説。パソコン再起動、電源の強制切断を解説。<br /> <br /> Section62 ファイルの個人情報を確認・・・ファイルには作成日時や種類などの個人情報が含まれている、プロパティで確認できる。<br /> <br /> Section63 フォルダーやファイルの詳細を確認する・・・通常では表示されないファイルやフォルダーを、エクスプローラーのメニューの「整理」をクリックし、「フォルダーと検索のオプション」をクリック、「フォルダーオプション」ダイアログが表示されるので「表示」タブをクリック、「隠しファイル、隠しフォルダーおよび隠しドライブを表示する」をクリック。<br /> <br /> Section64 パソコンの動作が不安定になった・・・システムの復元方法を解説。<br /> <br /> 索引<br /> <br /> <br /> <!-- amazon --><br /> <div class="sonet-asin-area"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774143650/aaaaaaaaaaam-22/ref=nosim" target="_blank"><img src="http://ecx.images-amazon.com/images/I/513JZdqRN4L._SL160_.jpg" class="sonet-asin-image" alt="今すぐ使えるかんたんmini Windows7基本技" title="今すぐ使えるかんたんmini Windows7基本技"></a><div class="sonet-asin-info"><p class="sonet-asin-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774143650/aaaaaaaaaaam-22/ref=nosim" target="_blank">今すぐ使えるかんたんmini Windows7基本技</a></p><ul><li class="sonet-asin-label">作者: 技術評論社編集部</li><li class="sonet-asin-label">出版社/メーカー: 技術評論社</li><li class="sonet-asin-label">発売日: 2010/09/10</li><li class="sonet-asin-label">メディア: 単行本(ソフトカバー)</li></ul></div></div><div class="sonet-asin-break"></div><br /> <!--/ amazon --><br /> <!-- rakuten --><br /> <p class="sonet-asin-title"><a href="http://hb.afl.rakuten.co.jp/hgc/g00rk0p4.719l5ac0.g00rk0p4.719l6bee/_RTsobl00000001?pc=http%3A%2F%2Fitem.rakuten.co.jp%2Fbookfan%2Fbk-4774143650%2F" target="_blank">今すぐ使えるかんたんmini【1000円以上送料無料】Windows7基本技/技術評論社編集部/オンサイト</a></p><br /> <!--/ rakuten --><br /> <br clear="all" /> <div class="tag-word">タグ:<a href="http://yo-yaku.blog.so-net.ne.jp/tag/%E6%8A%80%E8%A1%93%E8%A9%95%E8%AB%96%E7%A4%BE%E7%B7%A8%E9%9B%86%E9%83%A8" rel="nofollow">技術評論社編集部</a> </div> <div class="bookmark" data-url="http://yo-yaku.blog.so-net.ne.jp/2014-07-28" data-subject="今すぐ使えるかんたんmini Windows7基本技"></div> </div> <div class="posted"><span class="postDate">2014-07-28 00:44 </span> <a href="http://yo-yaku.blog.so-net.ne.jp/2014-07-28#favorite">nice!(1)</a>  <a href="http://yo-yaku.blog.so-net.ne.jp/2014-07-28#comments">コメント(0)</a>  <a href="http://yo-yaku.blog.so-net.ne.jp/2014-07-28#trackback">トラックバック(0)</a>  <br /><span class="postTheme">共通テーマ:</span><a href="http://blog.so-net.ne.jp/_contents/genre/0013/recent_articles/0001.html">本</a> </div> </div> <div class="articles-bottom"></div> <div class="archive-bottom"> <span class="previousLink"><a href="http://yo-yaku.blog.so-net.ne.jp/archive/c2300515359-2">前の5件</a></span> | - <span class="archive-name">プログラミング</span> <span class="archive-links"><a href="http://yo-yaku.blog.so-net.ne.jp/">ブログトップ</a></span> <br style="clear:both" /> </div> <div id="balloonBox"></div> <script type="text/javascript" charset="utf-8" src="http://blog.so-net.ne.jp/_js/bl-bookmarks.js?20150414"></script> <script type="text/javascript" charset="utf-8"> var bookmark_services = "ha,tw,fb,go,mi,twSP,miSP,htSP,goSP,fbSP,liSP".split('-').join('').split(","); var seesaaBookmarks = new blBookmarks({bookmark_services:bookmark_services, blog_url:"http://blog.so-net.ne.jp"}); seesaaBookmarks.exe(); </script> <!-- /Content --> </div> <div id="side-b"> <div class="sidebar" id="profile"> <h3 class="sidebar-title"><a href="http://yo-yaku.blog.so-net.ne.jp/">よよ</a> さん</h3> <div class="sidebar-body"> <dl> <dt class="profile-img"><img alt="よよさんの画像" src="http://blog.so-net.ne.jp/_profile/_35e/yo-yaku/_m_yo-yaku.png?2017-08-2121:14:00" border="0" width="72"></dt> <dd class="profile-status"> <span class="nice">nice!</span> 216 <br /> 記事 1061 <br />テーマ <span class="blogthemeLink"><a href="http://blog.so-net.ne.jp/_contents/blog_theme/0013/">本</a> (15位)</span> <br /> <span class="profileLink"><a href="http://yo-yaku.blog.so-net.ne.jp/_pages/user/profile/index">プロフィール</a></span> <br /> <span id="blog-introduction-area-login" style="display:none;"> <a href="" id="blog-introduction-button" onclick="blogIntroductionInProfile(this); return false;">ブログを紹介する</a><a href="http://blog-help.blog.so-net.ne.jp/introduction"><img border="0" alt="?" src="/_common/img/myblog/icon_help.gif" style="vertical-align: middle; margin-right: 3px;"></a> <p id="blog-introduction-msg-area"></p> </span> <span id="blog-introduction-area-no-login"> <a href="" id="blog-introduction-button-no-login" onclick="blogIntroductionInProfileNoLogin(this); return false;">ブログを紹介する</a><a href="http://blog-help.blog.so-net.ne.jp/introduction"><img border="0" alt="?" src="/_common/img/myblog/icon_help.gif" style="vertical-align: middle; margin-right: 3px;"></a> <p id="blog-introduction-msg-area-no-login" style="display:none;" > ログインすると自身のブログで本ブログを紹介できます </p> </span> </dd> </dl> </div> <div class="sidebar-end"></div> </div> <div class="sidebar" id="category"> <h3 class="sidebar-title">マイカテゴリー</h3> <div class="sidebar-body"> <ul> <li><a href="http://yo-yaku.blog.so-net.ne.jp/archive/c63370-1">ビジネス</a>(156)</li> <li><a href="http://yo-yaku.blog.so-net.ne.jp/archive/c66977-1">思考</a>(82)</li> <li><a href="http://yo-yaku.blog.so-net.ne.jp/archive/c2300137540-1">資産</a>(62)</li> <li><a href="http://yo-yaku.blog.so-net.ne.jp/archive/c2300141890-1">健康</a>(128)</li> <li><a href="http://yo-yaku.blog.so-net.ne.jp/archive/c2300294699-1">雑学</a>(197)</li> <li><a href="http://yo-yaku.blog.so-net.ne.jp/archive/c2300387723-1">子育て</a>(148)</li> <li><a href="http://yo-yaku.blog.so-net.ne.jp/archive/c2300515359-1">プログラミング</a>(43)</li> <li><a href="http://yo-yaku.blog.so-net.ne.jp/archive/c2300577155-1">家事</a>(68)</li> <li><a href="http://yo-yaku.blog.so-net.ne.jp/archive/c2300988640-1">小説</a>(65)</li> <li><a href="http://yo-yaku.blog.so-net.ne.jp/archive/c2301158395-1">自然科学</a>(81)</li> <li><a href="http://yo-yaku.blog.so-net.ne.jp/archive/c2301655003-1">語学</a>(16)</li> <li><a href="http://yo-yaku.blog.so-net.ne.jp/archive/c2301655075-1">農業</a>(12)</li> </ul> </div> <div class="sidebar-end"></div> </div> <div class="sidebar" id="latestEntry"> <h3 class="sidebar-title">最新記事一覧</h3> <div class="sidebar-body"> <ul> <li><a href="http://yo-yaku.blog.so-net.ne.jp/2017-08-21">ちょっと待った!! 大家さん! ..</a></li> <li><a href="http://yo-yaku.blog.so-net.ne.jp/2017-07-03">クリティカルチェーン―なぜ、プロジ..</a></li> <li><a href="http://yo-yaku.blog.so-net.ne.jp/2017-04-19">今すぐ使えるかんたん ぜったいデキ..</a></li> <li><a href="http://yo-yaku.blog.so-net.ne.jp/2017-04-16">ニセ科学を見抜くセンス</a></li> <li><a href="http://yo-yaku.blog.so-net.ne.jp/2017-01-10">ジヴェルニーの食卓</a></li> </ul> </div> <div class="sidebar-end"></div> </div> <div class="sidebar"> <h3 class="sidebar-title">広告</h3> <div class="sidebar-body custom-body"> <center> <a href="http://px.a8.net/svt/ejp?a8mat=1ZP42S+1YUYVU+348+699KH" target="_blank"> <img border="0" width="160" height="600" alt="" src="http://www21.a8.net/svt/bgt?aid=120424420119&wid=018&eno=01&mid=s00000000404001051000&mc=1"></a> <img border="0" width="1" height="1" src="http://www16.a8.net/0.gif?a8mat=1ZP42S+1YUYVU+348+699KH" alt=""></center> </div> <div class="sidebar-end"></div> </div> <div class="sidebar"> <h3 class="sidebar-title">広告</h3> <div class="sidebar-body custom-body"> <center> <a href="http://px.a8.net/svt/ejp?a8mat=1ZRBVO+AQEPI2+50+3T1K0X" target="_blank"> <img border="0" width="160" height="600" alt="" src="http://www27.a8.net/svt/bgt?aid=120527844649&wid=018&eno=01&mid=s00000000018023018000&mc=1"></a> <img border="0" width="1" height="1" src="http://www14.a8.net/0.gif?a8mat=1ZRBVO+AQEPI2+50+3T1K0X" alt=""> </center> </div> <div class="sidebar-end"></div> </div> <div class="sidebar"> <h3 class="sidebar-title">PRローテバナー</h3> <div class="sidebar-body custom-body"> <center> <iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?t=aaaaaaaaaaam-22&o=9&p=11&l=ur1&category=amazonsale&f=ifr" width="120" height="600" scrolling="no" border="0" marginwidth="0" style="border:none;" frameborder="0"></iframe> </center> </div> <div class="sidebar-end"></div> </div> <div class="sidebar"> <h3 class="sidebar-title">リンク集</h3> <div class="sidebar-body"> <ul> <li><a href="http://yonda-ehon.blog.so-net.ne.jp/" >昨日子どもに読んだ本</a></li> <li><a href="http://boardgamekids.blog.so-net.ne.jp/" >子どもと遊んだゲーム</a></li> <li><a href="http://book-ranking.lolipop.jp/book-note/index.html" >面白かった本ランキング</a></li> </ul> </div> <div class="sidebar-end"></div> </div> <!-- Massage --> <div id="rssRegistBox" class="sidebar"> <span id="myblog-display-area-no-login"> <div id="rssRegist" style="margin-bottom:3px;"> <a href="https://www.so-net.ne.jp/blog/_toh/regist/?campaign_no=911:220603">ブログを作って読者登録</a> </div> <div style="font-size:x-small; text-align:center;"> <p style="margin-bottom:6px;">このブログの更新情報が届きます</p> すでにブログをお持ちの方は[<a href="https://blog.so-net.ne.jp/MyPage/blog/user_rss/list?url=http://yo-yaku.blog.so-net.ne.jp/index.rdf">こちら</a>] </div> </span> <span id="myblog-display-area-login" style="display:none;"> <div id="rssRegist" style="margin-bottom:0;"> <a href="https://blog.so-net.ne.jp/MyPage/blog/user_rss/list?url=http://yo-yaku.blog.so-net.ne.jp/index.rdf">読者になる(RSSに登録)</a> </div> </span> </div> <div class="sidebar" id="search"> <h3 class="sidebar-title">検索ボックス</h3> <div class="sidebar-body"> <form action="http://yo-yaku.blog.so-net.ne.jp/search/"> よよ さんの記事から<br /> <input value="" name="keyword" type="text" class="search-tbox" /> <input value="検索" type="submit" class="input-submit" class="search-button" /> </form> </div> <div class="sidebar-end"></div> </div> <div class="sidebar" id="favoredMember"> <h3 class="sidebar-title"><a href="http://yo-yaku.blog.so-net.ne.jp/">よよ</a> さんの記事をnice!と思った人 (全53人)</h3> <div class="sidebar-body"> <ul> <li><a href="http://atmick.blog.so-net.ne.jp/">@ミック</a></li> <li><a href="http://tetsuwangenshi.blog.so-net.ne.jp/">鉄腕原子</a></li> <li><a href="http://doraken.blog.so-net.ne.jp/">はじドラ</a></li> <li><a href="http://takeaction.blog.so-net.ne.jp/">サイトー</a></li> <li><a href="http://akibaduga.blog.so-net.ne.jp/">ゆりかサイト</a></li> <li><a href="http://ikujiji.blog.so-net.ne.jp/">しゅわっち</a></li> <li><a href="http://makimaki56.blog.so-net.ne.jp/">makimaki</a></li> <li><a href="http://brightness.blog.so-net.ne.jp/">brightness</a></li> <li><a href="http://fxshufoo.blog.so-net.ne.jp/">ゆきママ</a></li> <li>ゆなお</li> <li><a href="http://mi--ma.blog.so-net.ne.jp/">みな</a></li> <li><a href="http://daydekigoto.blog.so-net.ne.jp/">さきまる</a></li> </ul> </div> <div class="sidebar-end"></div> </div> <div id="powered"> <span id="myblog-poweredby-no-login"><a href="https://www.so-net.ne.jp/blog/_toh/regist/"><img src="http://blog.so-net.ne.jp/_css_header/img/btn_join.gif" border="0" alt="ブログを作る(無料)" style="margin:0;" /></a> <table border="0" cellpadding="0" cellspacing="0" class="common-link"> <tr> <td> <ul> <li><a href="http://www.so-net.ne.jp/blog/about/">はじめてガイド</a></li> <li><a href="http://www.so-net.ne.jp/blog/about/moving.html">ブログお引越しガイド</a></li> <li><a href="http://blog.so-net.ne.jp/_contents/theme/">デザインテンプレートを見る</a></li> </ul> </td> </tr> </table> <a href="http://blog.so-net.ne.jp/"><img src="http://blog.so-net.ne.jp/_images/blog/_523/filestore/powered.gif" border="0" alt="powered by So-netブログ" /></a></span> <span id="myblog-poweredby-login" style="display:none;"><a href="http://blog.so-net.ne.jp/"><img src="http://blog.so-net.ne.jp/_images/blog/_523/filestore/powered.gif" border="0" alt="powered by So-netブログ" /></a></span> </div> <div class="sidebar"> <h3 class="sidebar-title">PR</h3> <div class="sidebar-body custom-body"> <center> <script charset="utf-8" type="text/javascript"> amzn_assoc_ad_type = "responsive_search_widget"; amzn_assoc_tracking_id = "aaaaaaaaaaam-22"; amzn_assoc_marketplace = "amazon"; amzn_assoc_region = "JP"; amzn_assoc_placement = ""; amzn_assoc_search_type = "search_widget"; amzn_assoc_width = "auto"; amzn_assoc_height = "auto"; amzn_assoc_default_search_category = ""; amzn_assoc_default_search_key = ""; amzn_assoc_theme = "light"; amzn_assoc_bg_color = "FFFFFF"; </script> <script src="//z-fe.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&Operation=GetScript&ID=OneJS&WS=1&MarketPlace=JP"></script> </center> </div> <div class="sidebar-end"></div> </div> <div class="sidebar"> <h3 class="sidebar-title">広告</h3> <div class="sidebar-body custom-body"> <center> <a href="http://px.a8.net/svt/ejp?a8mat=25IRSZ+G7GTMA+D8Y+6IP2P" target="_blank"> <img border="0" width="120" height="600" alt="" src="http://www26.a8.net/svt/bgt?aid=130206275980&wid=001&eno=01&mid=s00000001717001095000&mc=1"></a> <img border="0" width="1" height="1" src="http://www16.a8.net/0.gif?a8mat=25IRSZ+G7GTMA+D8Y+6IP2P" alt=""> </center> </div> <div class="sidebar-end"></div> </div> <div id="rssfeed"> <img src="http://blog.so-net.ne.jp/_common/img/rssfeed_s.gif" alt="RSS" align="absmiddle" /> <a href="http://yo-yaku.blog.so-net.ne.jp/index.rdf">RSS1.0</a> | <a href="http://yo-yaku.blog.so-net.ne.jp/index.xml">RSS2.0</a> </div> </div> </div> </div> <span id="iphone-link" style="display:none; padding-top:3px;text-align:left;"><a href="javascript:document.cookie='force_pc=0; max-age=15768000; path=/'; document.location='/'">スマートフォン専用ページを表示</a></span> <script type="text/javaScript"><!-- if ((0 <= navigator.userAgent.indexOf('iPhone')) || (0 <= navigator.userAgent.indexOf('Android'))) { document.getElementById('iphone-link').style.display = 'block'; } //--></script> <script type="text/javascript" src="http://www.so-net.ne.jp/search/javascripts/research/research.js"></script> <script type="text/javascript"> new ResearchBox({from:'blog_sarani'}); </script> <script type="text/javascript" charset="UTF-8" src="http://blog.so-net.ne.jp/_common/js/select_search.js"></script> <script type="text/javascript"> <!-- new SelectedSearchBox({from: 'blog_select', linkTarget: '_blank'}); // --> </script> <div id="footer"> <p class="footlink"><a href="http://blog-help.blog.so-net.ne.jp/">使い方</a> - <a href="http://faq.blog.so-net.ne.jp/">Q&A</a></p> <p class="copyright"><a href="http://www.so-net.ne.jp/">So-netトップ</a> - <a href="http://blog.so-net.ne.jp/" title="So-netブログ">ブログ</a> - <a href="http://www.so-net.ne.jp/point/" title="ソネットポイント">ソネットポイント</a></p> </div> <script type="text/javascript"> var name = "i-aad"; var dc = document.cookie; var prefix = name + "="; var begin = dc.indexOf(prefix); if (begin != -1) { var dom_obj = document.getElementById('ad-days-area'); if (dom_obj) dom_obj.style.display = "none"; } </script> <div id="ad-tablet"> <!-- fluct グループ名「SonetブログSタブレット(スマホ)_320×50_Web_オーバーレイ」 --> <script type="text/javascript" src="https://cdn-fluct.sh.adingo.jp/f.js?G=1000040893"></script> <!-- fluct ユニット名「SonetブログSタブレット(スマホ)_320×50_Web_iOS_オーバーレイ」 --> <script type="text/javascript"> //<![CDATA[ if(typeof(adingoFluct)!="undefined") adingoFluct.showAd('1000062790'); //]]> </script> <!-- fluct ユニット名「SonetブログSタブレット(スマホ)_320×50_Web_Android_オーバーレイ」 --> <script type="text/javascript"> //<![CDATA[ if(typeof(adingoFluct)!="undefined") adingoFluct.showAd('1000062791'); //]]> </script> <script type="text/javascript"> if (typeof(window['adingoFluctRefererTracking']) === 'undefined') { var AdingoFluctRefererTracking = function() { this.output_flg = false; this.slist = ['so-net.ne.jp']; this.cookie_frequency_name = 'adingo_fluct_frequency'; this.frequency_time = 1000 * 3600 * 6; // 12 hour } AdingoFluctRefererTracking.prototype = { getCookie : function(name) { var value = null; var cookiename = name + '='; var allcookies = document.cookie; var position = allcookies.indexOf(cookiename); if (position !== -1) { var startindex = position + cookiename.length; var endindex = allcookies.indexOf(';', startindex); if (endindex == -1) { endindex = allcookies.length; } value = decodeURIComponent(allcookies.substring(startindex, endindex)); } return value; }, initialize : function() { for (var i = 0; i < this.slist.length; i++) { if (document.referrer.indexOf(this.slist[i]) !== -1) { var frequency = this.getCookie(this.cookie_frequency_name); if (frequency !== 'true') { var expire = new Date(); expire.setTime( expire.getTime() + this.frequency_time ); document.cookie = this.cookie_frequency_name + '=' + encodeURIComponent('true') + '; domain=.' + this.slist[i] + '; path=/; expires=' + expire.toUTCString(); this.output_flg = true; } break; } } } }; window['adingoFluctRefererTracking'] = new AdingoFluctRefererTracking(); } window['adingoFluctRefererTracking'].initialize(); </script> <script type="text/javascript"> if (adingoFluctRefererTracking.output_flg) { document.write('<scr' + 'ipt type="text/javascript" src="https://cdn-fluct.sh.adingo.jp/f.js?G=1000062553&guid=ON"></scr' + 'ipt>'); } </script> <script type="text/javascript"> if (adingoFluctRefererTracking.output_flg) { if(typeof(adingoFluct)!="undefined") adingoFluct.showAd('1000093831'); if(typeof(adingoFluct)!="undefined") adingoFluct.showAd('1000093832'); } </script> </div> <script type="text/javascript"> function getCookieByMatch(regex) { for (var cs = document.cookie.split(/;\s*/), i = cs.length - 1; i >= 0; i--) { if (cs[i].match(regex)) { return cs[i]; } } } if (getCookieByMatch(/sonet-sid-L1|blog-sid/)) { var dom_tablet = document.getElementById('ad-tablet'); if (dom_tablet) dom_tablet.style.display = "none"; } </script> </body> </html>