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]

f:id:shiorichannel:20210219155056p:plain

ウインドーとターミナル

ディスプレーの左上隅にウインドーが現れ、その情報がターミナルに出力されます。そこで、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 のが分ります。

f:id:shiorichannel:20210220162632p:plain

入力と出力

対話形式では、利用者が「入力」したコードをコンピューターが解釈して、実行した結果に関する情報を「出力」します。つまり、入出力を介して、利用者とコンピューターが「対話」を繰り返しながら、試行錯誤によって経験を積みます。

サブコマンド :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/18Last updated: 2013/12/10 16:12:06