Java.use(better, Scala); S4(E2) 15パズル
#Scalaの栞
◉ Java.use(better, Scala); Season4(Episode2) 15パズル
[:contents]
対話形式の意義
最初に、次のコードの断片を入力します。すると、
scala> new swing.MainFrame { visible = true } res0: scala.swing.MainFrame = scala.swing.Frame$$anon$1[frame0,0,22,128x37,layout=java.awt.BorderLayout,title=,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]
ディスプレーの左上隅にウインドーが現れ、その情報がターミナルに出力されます。そこで、res0 で始まる出力から、その詳細を読み取ります。
まず、正式には scala.swing.MainFrame で、scala. の部分は省略可能と分ります。次に、128x37 から、ウインドーの寸法(幅x高さ)が分ります。そして、128x15 から、タイトルの部分を除いたウインドーの高さが 15(かつ、タイトルの高さが 22=37-15)と分ります。他の情報は、後述します。
では、一部を省略して入力すると、どうなるでしょうか。すると、
scala> new swing.MainFrame res1: scala.swing.MainFrame = scala.swing.Frame$$anon$1[frame1,0,22,0x0,invalid,hidden,layout=java.awt.BorderLayout,title=,resizable,normal,defaultCloseOperation=HIDE_ON_CLOSE,rootPane=javax.swing.JRootPane[,0,0,0x0,invalid,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=449,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true]
ウインドーは表示されずに、res1: で始まる情報だけを出力します。ウインドーは寸法を持たない 0x0 なので、隠れて見えない hidden のが分ります。
対話形式では、利用者が「入力」したコードをコンピューターが解釈して、実行した結果に関する情報を「出力」します。つまり、入出力を介して、利用者とコンピューターが「対話」を繰り返しながら、試行錯誤によって経験を積みます。
サブコマンド :type
さらに省略すると、どうなるでしょうか。すると、
scala> new MainFrame:8: error: not found: type MainFrame new MainFrame ^
エラーメッセージを出力します。そこから原因を探ると、型 MainFrame を確認できないのが分ります。そこで、help にあったサブコマンド :type を利用して、その型を確認します。サブコマンドは、コロン「:」に続けて入力します。
scala> :type MainFrame Failed to determine type.
やはり、型を決定できません。そこで、swing. を明記すると、
scala> :type swing.MainFrame <notype>
今度は「型なし」です。そして、swing だけを確認すると、
scala> :type swing package swing
swing は、パッケージだと分ります。サブコマンド :type を利用すると、有効な型の情報が得られます。が、その型が無効なら、それこそ「形無し」です。
import
import を利用すると、正式な名前を省略できるので便利です。たとえば、
scala> import swing.MainFrame import swing.MainFrame
swing.MainFrame に代えて、これを省略した末尾の MainFrame だけで認識できます。実はこの swing.MainFrame も、scala.swing.MainFrame を省略したものです。すると、
scala> new MainFrame res3: scala.swing.MainFrame = scala.swing.Frame$$anon$1[frame2,0,22,0x0,invalid,hidden,layout=java.awt.BorderLayout,title=,resizable,normal,defaultCloseOperation=HIDE_ON_CLOSE,rootPane=javax.swing.JRootPane[,0,0,0x0,invalid,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=449,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true]
今度は、同じコードの断片を入力しても、エラーメッセージを出力しません。変わらずウインドーは現れませんが、実行した結果に関する情報を出力します。
Created: 2012/12/18|Last updated: 2013/12/10 16:12:06