せっかくMacBook買ったので、Macも使ってみていたらいつのまにかXcodeという開発環境を試していた。

まずRubyCocoa 入門を参考に、電卓を作ってみた。

Calc2

RubyCocoa入門に書いてあるサンプルに、割り算とかけ算とログ出力機能を追加した。

Source Code (Ruby Cocoa 0.12 / Xcode 2.4.1)

開発環境はこんな感じ。

xcode

完全にMVCが分かれて実装される。まだModelを作る為の「CoreData」という奴を触った事がないが、

【特集】TigerのCocoaにみるMVCの完成 – スマートなデータモデルを実現するCore Data (1) CocoaのMVCモデルの発展 | エンタープライズ | マイコミジャーナル

ViewとControllerを作る為の「インタフェースビルダー」と「Xcode」(XcodeはこれらとQuartzComposerなどを合わせた全体の名前でもあるみたい)を今回は触ってみた。



GUIのコンポーネント(ボタン、テキストボックス、QuickTimeやOpenGLのコンポーネントなど)を配置して、大きさや初期状態を設定して、Contoroller(Rubyで書いてる)上での変数とバインドする。

Cocoaは.NET Frameworkみたいなもので、その上でObjective-CやJavaやRubyで開発ができる。Objective-Cは直接Cocoaの変数や関数を呼べるけど、Rubyはよくわからない変換を行ってCocoa上の関数や変数を呼ぶようになっている。

なので、RubyCocoa側では、

ib_outlet :resultText

と受け取るGUIコンポーネントを宣言しておいて

@resultText.setStringValue(result)

とすると、文字が出せたりとまあ普通にできることもあるけど、

場合によってはNSObjectとかNSStringというCocoa上でのオブジェクトとRubyのStringを変換してやったりする事もあって、ちょっと難しい。

RubyCocoaはまだバージョンが0.12なので、setStringValue()などのメソッドはObjective-Cのリファレンスを読んで見つけた。

今回のコード。まずRubyが初めてだったので、無名配列作ったり、文字列内で式展開する方法とかはぐぐらないとわからなかった。あと何より手こずったのが、Macでバックスラッシュを入力する方法。「¥+ option」

#
# AppController.rb
# Tutorial
#
# Created by 橋本 翔 on 07/09/24.
# Copyright (c) 2007 __MyCompanyName__. All rights reserved.
#

require 'osx/cocoa'

class AppController < OSX::NSObject
include OSX
ib_outlet :window, :xText, :yText, :opCombo, :resultText, :traceText

def awakeFromNib
puts 'awake'
@opCombo.addItemsWithTitles( ['*','/'] ) # かけ算、割り算追加
end

def onCalc(sender)
puts 'onCalc'
x = @xText.stringValue.to_i # 数値変換
y = @yText.stringValue.to_i
case @opCombo.selectedItem.title.to_s
when '+'; # 式を判定
result = x+y
when '-';
result = x-y
when '*';
result = x*y
when '/';
result = (x/y)
if x%y>0
result = result.to_s + ' ... ' + (x%y).to_s
end
end
@resultText.setStringValue(result) # 結果表示
@traceText.setString("#{result.to_s}\n#{@traceText.string}")
end
end