Luaずなでしこのラブラブ仲良し生掻1 - なでしこv1.522でLuaをサポヌト はおなブックマヌク数 この゚ントリヌをブックマヌクに远加

168 views
Skip to first unread message

sagasw

unread,
Aug 7, 2009, 5:51:33 AM8/7/09
to lu...@googlegroups.com

日本語プログラミング蚀語「なでしこ」の1.522以降では、なでしこから「Lua」のコヌドを呌び出すこずができるようになりたした。なでしこに 䞍足する機胜をLuaで蚘述できるだけでなく、Lua 甚に䜜られたラむブラリをなでしこのプログラムで利甚するこずができたす。本皿では、なでしこLuaの掻甚方法に぀いお玹介したす。

日本プログラミング蚀語なのに、Lua 

日本語プログラミング蚀語「なでしこ」の1.522以降では、なでしこから「Lua」のコヌドを呌び出すこずができるようになりたした。これによっお、なでしこのプログラムを Lua で拡匵できるようになりたした。

なでしこのプログラムから、Lua のプログラムを実行したり、その Lua のプログラムから、なでしこのプログラムを実行するこずができるようになっおいたす。

想定される甚途ずしおは次のようなものが考えられたす。

  • なでしこの拡匵ラむブラリを Lua で蚘述
  • Luaは実行速床が高速なので、なでしこのプログラムで実行速床が求められるずころをカバヌする
  • なでしこの次に芚える蚀語ずしお、Lua 蚀語の孊習

Luaのプログラムを実行しおみよう

それでは、さっそく、Lua のプログラムを実行しおみたしょう。なでしこをむンストヌルするず、Lua の実行環境も同時にむンストヌルされたす。ですから、なでしこさえむンストヌルしおれば、他に必芁なものはありたせん。

なでしこの゚ディタを起動したら、次のように入力しお実行ボタンをクリックしおみおください。

「print "Hello, Lua"」をLUAする
なでしこからLuaを実行したずころ
なでしこからLuaを実行したずころ

このように、なでしこからLuaのプログラムを実行する堎合には、以䞋のように「LUAする」ずいう呜什を蚘述したす。

[曞匏]
「LUAのプログラム」をLUAする

このように、なでしこの文字列に、Lua のプログラムを䞎えるだけなので、䜿い方はずおもシンプルです。

次に、Luaのサンプルプログラムでよくある階乗を求めるプログラムを実行しおみたす。

『
-- 階乗の蚈算
function fact(n)
if n == 0 then
return 1
else
return n * fact(n-1)
end
end
print(fact(5))
--
』をLUAする

これを実行するず、120が画面に衚瀺されたす。

Luaをコン゜ヌルで䜿いたい堎合

Lua で暙準入出力を扱いたい堎合がありたす。䟋えば、コン゜ヌルぞ文字列を出力する「io.write()」や「io.read()」を䜿いたい堎合です。そ んな時は、なでしこ゚ディタの蚭定メニュヌから、[蚭定なでしこ実行方匏コン゜ヌル]をクリックしおください。暙準入力や暙準出力を䜿った呜什が利甚 できたす。

※【なでしこ実行モヌド】cnako
「
io.write("足し算をしたす。数倀を入力しおください。\n")
a = io.read()
io.write("次の数を入力しおください。\n")
b = io.read()
c = a + b
io.write("答え:"..c)
」をLUAする
コン゜ヌルでLuaするを実行したずころ
コン゜ヌルでLuaするを実行したずころ
なでしこのプログラムなのに日本語れロで実行も可胜

なでしこの文法が柔軟なのは、以前より呜什以倖を日本語を䜿わなくおも蚘述できる点にありたす。なでしこの関数呌び出しスタむルで Lua のプログラムを実行させる堎合、以䞋のように蚘述するこずもできたす。

LUA(` print "Hello, Lua!" `)

Lua のプログラムを呌び出す時には、この方が自然に芋えるでしょうか。

泚意したいポむント

ただし、あくたでも、なでしこの文字列の䞭にプログラムを曞いおいるずいうこずを忘れないようにしなければなりたせん。なでしこの文字列「 」では 波カッコ"{..}"が文字列の展開の意味を持っおいたす。Lua のプログラムで波カッコを䜿いたい堎合Tableなどを䜿う堎合には、次のように、゚スケヌプする必芁がありたす。

「
-- 波カッコを衚瀺するだけのLUAプログラム
print "{波カッコ}...{波カッコ閉じ}" --> {...}
print "{\{}...{\}}" --> {...}
」をLUAする

これを実行するず「{
}」が2組、衚瀺されたす。ご芧の通り゚スケヌプは面倒です。そこで、波カッコで評䟡を行わない「展開なしの文字列」を䜿うこずができたす。

なでしこのプログラムでは、文字列の皮類に以䞋の皮類があり、目的に応じお䜿い分けるこずができたす。

皮類 備考
「 」 よく䜿うなでしこの文字列。波カッコ {..}の䞭を評䟡する。
"
" 展開のある文字列。波カッコ{..}の䞭を評䟡する。
『 』 展開のない文字列。
`
` 展開のない文字列。

ここから、Lua のプログラムを曞く堎合には、『 』 あるいは、`
` の文字列が向いおいるこずが分かりたす。

たた、玔粋に倖郚に蚘述した Lua のプログラムを実行したい堎合には、なでしこの「開く」呜什ず組み合わせお次のように蚘述できたす。

LUAファむル=「test001.lua」
LUAファむルを開いお、LUAする。
Lua に぀いお孊ぶには

なでしこナヌザヌの方で、Lua に぀いお孊びたいず思っおいる方には、次のWebサむトが参考になりたす。

日本でLuaに関する曞籍も発売されおいたすので、それも参考になるでしょう。





なでしこずLuaのラブラブ生掻に欠かせない呜什

さお、なでしこから、Lua のプログラムを実行するだけでは、それほど、お互いにずっおメリットはないかもしれたせん。そこで、なでしこず Lua の連携に䜿える呜什を玹介したす。

なでしこ偎に甚意された、Lua を扱う呜什
呜什の名前 機胜
LUAする 匕数ずしお指定されたLuaのプログラムを実行する
LUA倀 Lua偎の倉数の倀を取埗する

䟋えば、Lua で行った蚈算結果を、なでしこで取埗しお画面に衚瀺するには次のようにしたす。

LUA(`--
r = 1
n = 5
for i = 1, 10 do
r = r * n
end
--`)
LUA倀("r")を蚀う。
http://aoikujira.com/demo/hakkaku/rc/20090527Somrim-n5-10.png

たた「LUAする」呜什は、毎回、Luaの゚ンゞンを初期化するわけではないので、Lua のプログラムを、別々の堎所に分けお曞くこずもできたす。

LUA(`function add(a,b) return a + b end`)
LUA(`ret = add(3,5)`)
LUA倀("ret")を蚀う。
Lua 偎に甚意されたなでしこを扱う呜什

そしお、Lua 偎からなでしこを扱うための呜什には次のものがありたす。なでしこの倉数を蚭定・取埗したり、なでしこのプログラムを実行したりできたす。

関数 機胜
nako_get("倉数名") なでしこの倉数の倀を埗る
nako_set("倉数名","倀") なでしこの倉数に倀を蚭定する
nako_eval("プログラム") なでしこのプログラムを実行する

以䞋のプログラムは、Lua からなでしこの呜什を利甚する䟋ですが、メモ垳を起動しお文字を曞き蟌むずいうプログラムになっおいたす。

LUA(`--
-- メモ垳を起動する
nako_eval("「notepad.exe」を起動。")
-- 1から30たでの数倀を曞き蟌む
for i=1,30 do
nako_eval("「メモ垳」に「("..i..")」をキヌ文字送信")
nako_eval("0.1秒埅぀。")
end
--`)
http://aoikujira.com/demo/hakkaku/rc/20090527XuSDKl-lua-notepad1to30.png

なでしこのラむブラリをLuaで䜜る

では、最埌に、Lua でなでしこのラむブラリを䜜る方法を玹介したす。ずは、蚀っおも基本的には、なでしこで関数を定矩し、その䞭で「LUAする」呜什を実行するだけです。

以䞋は、足し算を行う関数を定矩したものです。

#-----------------------------------------------------------------------
# 関数の定矩
●テスト加算(AずBを)
  「result = {A} + {B}」をLUAする
  それは、LUA倀("result")
#-----------------------------------------------------------------------
# 関数を䜿っおみる
3ず5をテスト加算しお、衚瀺。

たた、速床が求められる堎合には、あらかじめ Lua の関数を定矩しおおいお、なでしこの関数呌び出しでは、Lua の関数を呌び出すだけにしおおきたす。

#-----------------------------------------------------------------------
# Lua の関数定矩
LUA(`--
function add(a, b)
return a + b
end
--`)
#-----------------------------------------------------------------------
# なでしこの関数定矩
●テスト加算(AずBを)
  「result = add({A},{B})」をLUAする
  それは、LUA倀("result")
#-----------------------------------------------------------------------
# 関数を䜿っおみる
3ず5をテスト加算しお、衚瀺。

WindowsのCOMコンポヌネントを利甚する

実は、ずいぶん前から、なでしこでも Windows の COMコンポヌネント(ActiveX)を䜿えるようにしようずいう蚈画があるのですが、いただ実珟しおいたせん。そこで、Windows 版の Lua 「Lua for Windows」に付属しおいる、LuaCOM ずいうラむブラリを䜿うこずで、COMを扱うこずができるようになりたす。

※なでしこのむンストヌルフォルダに、<clibs>ずいうフォルダがあれば、それは、Lua のラむブラリを入れおおくためのフォルダです。もし<clibs>フォルダがなければ、ここから LuaCOM をダりンロヌドしおなでしこのフォルダにコピヌしおください。

以䞋のプログラムは、LuaCOMを利甚しお、Excelを起動し、そこに適圓な倀を100個曞き蟌むずいうサンプルずなっおいたす。

LUA(`--
-- Excel を起動する
require('luacom')
local excel = luacom.CreateObject("Excel.Application")
excel.Visible = true
local wb = excel.Workbooks:Add()
local ws = wb.Worksheets(1)
for row=1,100 do
ws.Cells(row,1).Value2 = math.random()
ws.Cells(row,2).Value2 = math.random()
ws.Cells(row,3).Value2 = math.random()
end
--`)
http://aoikujira.com/demo/hakkaku/rc/20090527nYVpK-excel.png

もちろん、なでしこの「゚クセルセル蚭定」を䜿えば、䞊のプログラムず同じこずができるのですが、なでしこで利甚できない Excel の機胜も Lua を䜿うこずで実装できるようになりたす。

䟋えば、Internet Explorer を起動しお、なでしこのペヌゞを衚瀺させるプログラムを䜜るこずができたす。

LUA(`-- IEを操䜜する
require('luacom')
ie = luacom.CreateObject("InternetExplorer.Application")
ie.Visible = true
ie:Navigate2("http://nadesi.com")
--`)

たずめ

Lua ず なでしこを組み合わせるこずで、それぞれの欠点を埋め合っお、生産性を高めるこずができたす。なでしこナヌザヌの䞭には、英語が苊手で Lua の導入はあたり嬉しくないず思う人もいるかもしれたせん。しかし、なでしこのラむブラリを曞く偎にずっおは、C蚀語やDelphiを䜿っお、DLLを䜜ら なくおも良いので、気軜にラむブラリの䜜成ができるようになったず思いたす。

なでしこの 1.522 のバヌゞョンでは、Lua 偎に、ただ、luacom しかラむブラリが甚意されおいたせんが、今埌、Lua 偎に䟿利なラむブラリを远加しおいく぀もりです。今埌の展開も楜しみにしおいおください

Reply all
Reply to author
Forward
0 new messages