history

青木日記 RSS

<前の日 | この月 | 次の日>

2007-02-08

RubyCocoa で Hello, World

ちょっと GUI なアプリケーションが 作りたくなったので RubyCocoa を 使ってみることにする。

まあ、とりあえず Hello, World。

require 'osx/cocoa'
 
class HelloApp <  OSX::NSObject
   def quit(notifier)
     exit
   end
end
 
app = OSX::NSApplication.sharedApplication
app.setDelegate HelloApp.alloc.init
win = OSX::NSWindow.alloc.initWithContentRect_styleMask_backing_defer([200.0, 300.0, 250.0, 60.0], 15, 2, 0)
win.setTitle 'Hello RubyCocoa'
win.setLevel(3)   # floating window
win.orderFrontRegardless
button = OSX::NSButton.alloc.initWithFrame([10.0, 10.0, 210.0, 40.0])
win.contentView.addSubview button
button.setBezelStyle 4
button.setTitle 'Hello, World!'
button.setTarget app.delegate
button.setAction 'quit:'
button.setEnabled true
app.run

NSWindow の initWith なんたらという メソッド名がやたら長い。 これはなんか理由を聞いたことあるなあ。 RHG 読書会で聞いたんだっけ。 キーワード引数名がエンコードされてるので ハッシュだと順番が変わってしまってだめ、 というやつだな。

(05:12)

本日のツッコミ(全4件) [ツッコミを入れる]
hisa (2007-02-09 08:45)

長いメソッド名は、とても説明的なので意味をつかみやすいのがメリットだと思うのですが、引数のラベルと実引数をObjective-Cのように対で書けない場合には、むしろ読みにくくてデメリットになってしまいます。ということで、RubyCocoaではobjc_sendというメソッド (0.10.1以降)でそこのところをサポートしています。
http://www.fobj.com/hisa/d/20070209.html#p01

青木 (2007-02-09 23:59)

お、その話も以前聞いたような気がします。
もう実装されてたんですね。ありがとうございます。
ついでに、alloc.objc_send(:initXXX, ...) が
new(...) にできたりはしませんか?

青木 (2007-02-10 00:02)

ああそうか単純な変換じゃだめなんだ。
「With」がうまくないですね。
なんかいい方法ないのかなあ。

青木 (2007-02-10 00:03)

全部 with だったら無条件で
with を付けてしまえばいいのかなあ……。

名前
メールアドレス

<前の日 | この月 | 次の日>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|04|05|06|09|10|
2009|07|
2010|09|

Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved. LIRS