Java.use(better, Scala); S4(E3) 15パズル
#Scalaの栞
◉ Java.use(better, Scala); Season4(Episode1) 15パズル
変数を介して値を設定する
ときに、res3 とは何でしょうか。そこで、型を確認すると、
scala> :type res3 scala.swing.MainFrame
その変数を束縛している対象は、ウインドー MainFrame だと分ります。res3 は、隠れたウインドーを参照するための、隠れた変数です。というのも、対話形式では、実行した結果を後で参照できるように、隠れた変数が順に(res0, res1, ...)用意されるからです。
隠れた変数 res3 は、ウインドーに束縛されます。それなら、res3 を介して値を設定すると、隠れたウインドーが見えるようになるはずです。そこで、
scala> res3.visible = true
変数 res3 を介して、ウインドーの属性 visible に値 true を設定すると、ウインドーが現れます。このときの値 true は、真を表わす論理値です。同様に、
scala> res3.title = "A"
変数 res3 を介して、ウインドーの属性 title に値 "A" を設定すると、それがウインドーのタイトルに表示されます。二重引用符で囲まれた "A" は、文字列を表わします。すると、タイトルが違うのでウインドーを区別できます。
一般に、属性に値を設定(属性値を変更)するときには、次の書式に従います。
scala> オブジェクト.属性 = 値
この二重引用符には意味があります。というのも、それがないと、変数やモジュールなどと解釈されるからです。それを二重引用符で括ると「文字の並び」をそのまま解釈して欲しいという利用者の意図が、コンピューターに伝わります。
文字列のように、変数を介する必要がない、オブジェクトそのものを表現したものをリテラル〔literal〕と呼びます。そして、意味のあるオブジェクトはどれも、リテラルに帰着します。
変数を介して値を獲得する
変数を入力すると、その値が出力されます。これは、変数を評価したときに、その変数が束縛されている対象(オブジェクト)が得られるからです。
ときに、変数 res3 の値(型ではなく)は何でしょうか。変数 res3 を評価すると、その変数が束縛されているウインドーが得られます。そして、入力した変数を評価した結果として、得られたウインドーの情報が出力されます。このとき、
scala> res3 res4: scala.swing.MainFrame = scala.swing.Frame$$anon$1[frame2,0,22,128x37,layout=java.awt.BorderLayout,title=A,resizable,normal,defaultCloseOperation=HIDE_ON_CLOSE,rootPane=javax.swing.JRootPane[,0,22,128x15,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=449,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true]
変数 res3 を評価した結果を参照するために、また新たな変数 res4 が用意されます。res4 で始まる出力から、設定されたタイトル title=A を確認できます。このとき、2つの変数 res3 および res4 はどちらも、同じウインドーに束縛されます。それが事実なら、
scala> res4.title = "C"
変数 res3 に代えて、変数 res4 を介しても、タイトルを変更できるはずです。変数 res4 に代えて、変数 res3 を介して、その属性値を確認すると、
scala> res3.title res5: String = C 20131210031803
文字列 "C" が得られます。ここでも、その結果を参照するために、また新たな変数 res5 が用意されます。このとき、単純な文字列と複雑なウインドーとの間に、本質的な違いはありません。どちらも一人前のオブジェクトです。
変数 res5 res0 --------------------------------------------------- 型 String scala.swing.MainFrame 値 C scala.swing.Frame$$anon$1[frame0,...]
一般に、属性の値を獲得(属性値を参照)するときには、次の書式に従います。
scala> オブジェクト.属性
変数: 型 = 値
変数 res5 の型は文字列 String で、その値は文字列 C です。また、2つの変数 res3 および res4 がどちらも、同じウインドーに束縛される事実は、
scala> res3 == res4 res6: Boolean = true
でも確認できます。ここでも、また新たな変数 res6 が用意され、その型は論理型 Boolean で、その値は真を表わす true だと分ります。文字列と同様に、true もリテラルのひとつで、すでに何度も登場しています。
Created: 2012/12/18|Last updated: 2013/12/10 16:13:34