Home > xyzzy Archive

xyzzy Archive

Rubyとxyzzy 二日目 後半

xyzzyで学んだこと

;;選択時はWindows風に
(load-library “winkey”)
;;全選択を C-a に割り当てる
(global-set-key #\C-a ’selection-whole-buffer)

 Fn + ←(Home) ショートカットキーでのタブ移動

Ruby on Railsで学んだこと

ヘルパーの使い方
リンク先が現在のページと同じ場合(current_page?(item[:link]))や利用不可の場合(item[:disabled])はspan要素を作り、そうでなければlink_toメソッドでリンクを作る

ヘルパー側(app/helper/application_helper.rb)


# Methods added to this helper will be available to all templates in the application.
module ApplicationHelper
  def menu_link_to(item)
    if current_page?(item[:link])
      '<span class="current_page">' + item[:name] + '</span>'
    elsif item[:disabled]
      '<span class="disabled">' + item[:name] + '(準備中)</span>'
    else
      link_to(item[:name], item[:link])
    end
  end
end

テンプレート側

<% menu_items = [
  { :link => { :controller => '/main', :action => 'index' },
    :name => 'TOP' },
  { :link => { :controller => '/main', :action => 'activities' },
    :name => '私たちの活動'},
  { :link => { :controller => '/main', :action => 'news'},
    :name => 'ニュース' },
  { :link => { :controller => '/blog_entries', :action => 'index' },
    :name => 'ブログ', :disabled => true },
  { :link => { :controller => '/members', :action => 'index' },
    :name => '会員名簿', :disabled => true },
  { :link => { :controller => '/admin/main', :action => 'index' },
    :name => '管理ページ', :disabled => true }
  ] -%>
<div id="menu_bar">
<% menu_items.each_with_index do |item, index| -%>
 <% if index > 0 %>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;<% end -%>
  <%= menu_link_to item -%>
<% end -%>
</div>

今後やりたいこと

シンボルの意味がいまいちなので再度復習する
xyzzyのショートカットキーでのタブ移動

Rubyとxyzzy 二日目 前半

xyzzyで学んだこと

ファイルを閉じる C-x k
次を検索/前を検索 F5/S-F5
コピー C-Insert
ペースト S-Insert

マウスだけでコピー・ペースト .xyzzyに追加

(defun mouse-right-press ()
(interactive)
(mouse-left-press)
(paste-from-clipboard))
(global-set-key #\LBtnUp ‘copy-selection-to-clipboard)
(global-set-key #\RBtnUp ‘mouse-right-press)
(global-set-key #\MBtnUp ‘mouse-menu-popup)

出所 http://chez-sugi.net/xyzzy/

rubyで学んだこと

Rubyではnumが0の場合はtrue(正しい)になります。また、空文字列「”」もtrueになります。

文字列の中に変数

puts "2かける3は#{2 * 3}です。" # 2かける3は6です。
name = "佐藤"
puts "#{name}さん、こんにちは。" # 佐藤さん、こんにちは。

インスタンス変数
「@」を付けた変数は、クラスのインスタンスごとに作られるインスタンス変数です。

class Book
  def initialize(title, price) # 初期化
    @title = title
    @price = price
  end
  def put_data # 書名と価格の表示
    puts "『#@title』、#@price円"
  end
end

book1 = Book.new('こころ', 380) # 本のインスタンス1
book2 = Book.new('明暗', 700) # 本のインスタンス2
book1.put_data
book2.put_data

インスタンス変数@….を作っても、オブジェクトの外からはインスタンス変数にアクセスできません。アクセスしたい場合は変数と同名のメソッドを用意する必要があります。
つまり、ほかのプログラミング言語のメンバ変数やプロパティに当たるものはRubyにはなく、オブジェクトのデータにアクセスするにはメソッドを書かなければならないということです。
このような読み出しや書き込み用のメソッドをアクセサメソッドと呼び、アクセサメソッドでやり取りできるデータを属性と呼びます。Rubyの属性の実態は変数ではなくメソッドであることに注意しましょう。

class Book
  def title          # 書名の読み出し
    @title
  end
  def title=(title)  # 書名の書き込み
    @title = title
  end
end

book1 = Book.new
book1.title = '草枕'
puts book1.title   # 草枕

Rubyにはもっと簡単な書き方が用意されています。attr_reader :titleと記述すると読み出し用メソッドが、attr_wrriter :titleと記述すると書き込み用メソッドが自動的に追加されます。

class Book
  attr_reader :title
  attr_writer  :title
end

# 読み書き両方のメソッドを作りたいときは、attr_accessorを使います。
class Book
  attr_accessor :title :price
end

class Book
  attr_accessor :title, :price # 読み書きできる属性

  def initialize(title, price)
    @title = title
    @price = price
  end
end

book1 = Book.new('こころ', 380)
book2 = Book.new('明暗', 700)
book1.price = 420 # 価格を変更
puts "『#{book1.title}』、#{book1.price}円" # 『こころ』、420円
puts "『#{book2.title}』、#{book2.price}円" # 『明暗』、700円

Ruby(Ruby on Rails)とxyzzyをデビューしました

windowsのコマンドで学んだこと

ls → dir
rm → del
mv → rename

xyzzyで学んだこと

C-x C-k f で文字コード変換
C-r 上に検索
C-s 下に検索
C-x C-f ファイルを開く

rubyで学んだこと

%q、%、Q%を使うと、二十引用符と一重引用符以外の好きな記号で文字列を囲むことができる

hello = %q/こんにちは/
hello = %Q(こんにちは)
hello = %<こんにちは>

変数型変換

a = 4
b = '9'
puts a.to_s + b  # 49 数値を文字列に変換するメソッド to_s (to_stringの略でしょ)
puts a + b.to_i   # 13 文字列を整数に変換するには to_i (to_intの略でしょ)
puts a * b.to_i   # 36 浮動小数点に変換するには to_f (to_floatの略でしょ)

配列

colors = ['red', 'blue', 'yellow']
puts colors.join(', ')   # red, blue, yellow
colors.push('pink', 'green')
puts colors.join(', ')   # red, blue, pink, green

イテレータ

10.times do |i|
  print i, ', '  # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
end

# eachメソッドは、パラメータ(次の例ではitem)に配列の要素を代入しながら
# 配列の要素数だけ繰り返します。
arr = ['apple', 'orange', 'grape']
arr.each do |item|
  print item + ', ' # apple, orange, grape,
end

# 配列の要素とともに要素の番号も扱い時は、each_with_indexメソッドを使用
arr = ['apple', 'orange' ,'grape']
arr.each_with_index do |item, i|
  print "#{i}.#{item}";
  print ', ' if i < arr.lentgh -1
end

例外処理

begin
  f = File.open('notexist.txt')
  print f.gets
  f.close
rescue SystemCallError => e # SystemCallErrorによる例外をキャッチ
  warn 'SystemCallError: ' + e.message
rescue Exception => e     # その他の例外をキャッチ
  warn 'Exception: ' + e.message
end

「?」「!」がつくメソッド

# 「?」が付くメソッドは、trueまたはfalseを返すことを表す。
if message.empty? .... # 空かどうかを調べる
if array.include?('apple') .... # appleが含まれるかどうか調べる
s1= 'hello'
puts s1.class # String
puts s1.kind_of?(String) # true
puts s1.kind_of?(Object) # true
puts s1.instance_of?(String) # true
puts s1.instance_of?(Object) # false

# 「!」が付くメソッドは、そのオブジェクトの中身を変更することを表す。
s1 = 'hello'
s2 = s1
puts s2 # hello
s1.upcase!
puts s2 # HELLO

今後やりたいこと

xyzzyの色づけ

Home > xyzzy Archive

Search
Feeds
Meta

Return to page top