Rubyの好きなところ

区分
CommonLISP愛
報告者

こんにちは、chibaです! 私はCommon Lispからプログラミングを始めたせいか返り値を使ったプログラミングスタイルが好きなのですが、Rubyは多値と配列と可変長引数が統合されたようになっていて、なかなか使い勝手が良く、Rubyの好きなところの一つです。いまのところ一つです。

x = 3
[0, *if x.even?
       [1, 2, 3]
     else
       [:a, :b, :c]
     end]

;⇒ [0, :a, :b, :c]
def iota(n)
  if n.zero?
    0
  else
    [n, *iota(n - 1)]
  end
end

iota(10)
;⇒ [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Proc.new do |x, y| x * y;end [100,2]
;⇒ 200

LISP/Schemeでも、書けるといえば書けるのですが、

;; Common LISP
(let ((x 3))
  `#(0 ,@(if (evenp x)
             '(1 2 3)
             '(:a :b :c))))
;⇒ #(0 :A :B :C)

(defun iota (n)
  (if (zerop n)
      (list 0)
      `(,n ,@(iota (1- n)))))

;⇒ (10 9 8 7 6 5 4 3 2 1 0)

(multiple-value-call #'* (values-list '(100 2)))
;⇒ 200

;; もしくは
(apply #'* '(100 2))
;⇒ 200

Rubyの方が統一感があって良いですね。

トップページに戻る

技師部隊からの
お知らせ

【求人】エンジニア募集しています。

本頁の来客数
八十七万千百七十六名以上(計測停止中)

メンバー一覧

アクトインディ技師部隊員名簿

アクトインディ技師部元隊員

アクトインディへ

カテゴリー

アクトインディ

aaaa