最近の記事
- 4/24 - 優先順位
- 3/17 - vbNullString と 空文字列 ""
- 3/15 - InputBox 関数の戻り値
- 3/13 - 紙と Excel と VBA
- 3/9 - 未だに Visual Basic 6
- 11/14 - ぼて閉鎖
- 11/9 - 関数オブジェクトの呼び出し
- 9/7 - メソッドとしての関数オブジェクト
- 8/18 - コンストラクタとしての関数オブジェクト
- 8/4 - オブジェクトの生成
Entering Passive Mode
最近、優先順位について悩んでいる。
家事、仕事、人付き合い、趣味、情報収集、気晴らし、スポーツ、勉強、研究、教育。
一週間、何に何時間使ったか調べてみると、最近酷く偏ってきていることが分かった。
人に聞いたり任せる事が苦手なタイプなので、
気になったことは自分でやり、調べる性格。
昔はそれで良かったのだが、年齢と共に、頭の回転も落ちてきてるのだろうか、
同じような事をやるにしても、勉強や研究に使う時間は長くなってきている。
どうも最近は、「成すべき事が多すぎて、生活時間内で完遂できない」のではないか?
時間が足らないということは、何かが切り捨てられているのだ。
明らかに、タダでさえ低い優先順位の日記更新は切り捨てられているし、
趣味に割く時間もどんどん削られている。
5 年前は余裕を持って生活していたはずなのだが。
その頃の基準が今の俺に通用しないのか?
健康や生活に影響が出ているわけではないので、大きな問題ではないはずだが、
何か、第六感が、このままでは危ないと告げている。
さて、この状況を如何に打開すべきか。
こんなことを考えているだけでも余計な時間を使うことになるんだが。
うーむ。
では、続き。
InputBox 関数のマニュアルのミスとは、キャンセルされた場合に返す値である。
実際には、InputBox 関数でキャンセルすると、長さ 0 の文字列 ("") ではなく、vbNullString が返る。
この、vbNullString は、"" とは異なる値である。
InputBox 関数で OK を押した場合、テキストボックスの内容が戻り値となる。
テキストボックスが空の場合は "" が返るので、キャンセルの vbNullString と区別することができる。
ただ、1 つ大きな問題がある。
vbNullString と "" をどうやって区別すれば良いのか。
vbNullString = "" は TrueStrComp(vbNullString, "") は 0Len(vbNullString) も Len("") は 0困ったことに、VBA の一般的な方法では、上記を区別するのは困難なので、特別な方法を使う必要がある。
VB(A) の中でも、不思議な仕様なのが InputBox 関数だ。
この関数は、一行入力のテキストボックスを持つダイアログボックスを表示し、 利用者に適当なテキストの入力を促す。 見た目が質素なので、その用途は微妙だが、 フォームをいちいち作るのが面倒な時に使うこともある。
ダイアログボックスには、OK だけでなくキャンセルボタンもあるので、 利用者はキャンセルを選んで、処理を中止することもできる。 ということは、この関数は入力されたテキストだけでなく、 キャンセルされたかどうかの情報も返さなければならない。
さて、この関数の戻り値は、String 型である。 他の引数には値を呼び出し側に返すものはなく、 エラーを使ってキャンセルを表す感じでもない。 つまり、戻り値のみで対応しないといけないのだ。
どうなっているのか。
私にとって、Excel は紙のようなものである。
紙には、制限なく素早く自由に文字が書ける強みがあり、Excel には、自由にデータを移動、コピーできる強みがある。
考え事をするときは白紙と方眼紙とペンが手放せないのだが、紙に好きに書いて色々考え、頭の整理がついた後は、Excel を起動して区分・分類する癖がある。
Excel は表計算ソフトなので、計算用なイメージがあるが、そういった使い方ではなく、単なるメモ用として使っている。
それだけなら、別に Excel でなく、メモ帳や付箋ソフトでも良いんじゃないのと思うだろうが、私は VB プログラマなので、Excel に附属している VBA という環境が魅力なのである。
Excel をはじめとする Office ソフトには、古くから VBA と呼ばれるプログラミング環境がある。VBA は VB 系の中でも異例で、Office と共に 15 年も生き続けている長寿の言語である。
VBA では、アプリケーションの操作を自動化することができる程度にとどまらず、VB 言語を使って、自由にプログラムを書くことができる。
プログラムは Excel のデータと一緒にファイルに保管されるため、持ち運びも非常に楽である。Excel の普及率は結構高いので、人に渡す時もあまり苦労せずに済む。
そのため、小さな業務の効率化のために、Excel は欠かせないツールとなっている。
Windows も 7 が出るとか言ってる時代なのに、 未だに Visual Basic 6 の案件があったりする。 それも、スタンドアロンのアプリケーションで。
Excel や Word などの Office 製品のマクロでは、 まだ Visual Basic for Application (VBA) が現役なので、 Visual Basic Classic が廃れたかというとそうではないのだが。
VB2 から入った私には付き合いの長い言語であり、愛着もある。
業務の関係もあるので、しばらくはぽつぽつ VB の話をしようかな。
青天の霹靂。
東梅田のぼてがなくなってました。
結構ダメージ。
function foo() {
;
}
var obj = new Object();
obj.foo = foo;
var x = foo();
var y = new foo();
var z = obj.foo();
関数オブジェクトには 3 つの用途があることが分かった。
他の言語では、これらは独立していることが多いが、
JavaScript では、全て関数オブジェクトを利用する。
これらを区別するのは、その呼び出し方法である。
function getThisValue() {
return this.value;
}
function setThisValue(value) {
this.value = value;
}
function Foo() {
this.value = 0;
this.getValue = getThisValue;
this.setValue = setThisValue;
}
var foo = new Foo();
foo.setValue(3 * 5);
alert(foo.getValue()); // 15
JavaScript では、メソッドもまた関数オブジェクトである。
JavaScript においては、メソッドはプロパティの一種であり、
オブジェクトのプロパティに関数オブジェクトを代入すると、
それはメソッドとして呼び出せるようになる。
function Foo(x, y) {
this.value = x * y;
}
var foo = new Foo(3, 5);
alert(foo.value); // 15
alert(typeof foo); // object
new 演算子で関数オブジェクトを呼び出す事で、
他のプログラミング言語同様、
オブジェクトを生成することができる。
foo = new Object(); foo.property = 12345;
bar = new Function("x, y", "return x * y;");
baz = new Array(123, "abc", null);
qux = new String("String object");
quux = new Boolean(true);
corge = new Number(12345);
grault = new Date();
garply = new RegExp("\\d+");
waldo = new Error("No way.");
プリミティブ値はリテラル記法で表現したが、
オブジェクトは主に new 演算子を使って生成する。
Function オブジェクトに関しては、
function キーワードを使って作成するのが普通だが、
他と同様、new 演算子で作成することも可能だ。
JavaScript でのオブジェクト生成構文は、
Java や C++ に近くなるように設計されている。
ただ、JavaScript ではその文の意味合いが大きく異なる。