Help us understand the problem. What is going on with this article? 2018/07/05 追記 JavaScript と漸進的型付について詳しい mizchi さんが記事を書いたので、併せて読むと良さそうです。 漸進的型付け言語の時代に必要なもの 前置き RubyKaigi2018 の発表で型の導入の検討についての話がいくつかあったものの、 Matz 自身は型アノテーションに否定的であるという発言をしているとのことを受けて、自分の意見の表明として書いている。 筆者は Ruby に育てられて Ruby は好きであるが、業務経験は主に JavaScript(TypeScript) や Python(Type Hinting) が多く、漸進的型付けによるコードの健全化を経験した上で、型付きの方が好きであるという立場である。 なお
Ruby は基本的にすべてがオブジェクトで、またすべてが「参照の値渡し」です。ただし数値とシンボルは immutable なので、「値渡し」のように振舞います。 注意すべきは文字列です。 a = "Hello" p a.object_id #=>23440680 b = a p b.object_id #=>23440680 b += ", world!" p b #=>"Hello, world!" p b.object_id #=>23440560 p a #=>"Hello" p a.object_id #=>23440680 b = a をやっていますが、b += ", world!" のところで別のオブジェクトが生成されているので、a を出力しても "Hello" になります。一見「値渡し」のようです。けれども、 a = "hello" p a #=>"hello" b = a
Goby is an object-oriented interpreter language deeply inspired by Ruby as well as its core implementation by 100% pure Go. Moreover, it has standard libraries to provide several features such as the Plugin system. Note that we do not intend to reproduce whole of the honorable works of Ruby syntax/implementation/libraries. The expected use case for Goby would be backend development. With this goal
『るびま』は、Ruby に関する技術記事はもちろんのこと、Rubyist へのインタビューやエッセイ、その他をお届けするウェブ雑誌です。 Rubyist Magazine について 『Rubyist Magazine』、略して『るびま』は、Rubyist の Rubyist による、Rubyist とそうでない人のためのウェブ雑誌です。 最新号 Rubyist Magazine 0064 号 バックナンバー Rubyist Magazine 0064 号 Rubyist Magazine 0063 号 Rubyist Magazine 0062 号 Kaigi on Rails 特集号 RubyKaigi Takeout 2020 特集号 Rubyist Magazine 0061 号 Rubyist Magazine 0060 号 RubyKaigi 2019 直前特集号 Rubyist
Ruby 2.2.0 preview1: ついに来ました!恒等関数 Kernel#itself などなど こんにちは、鈴木です。 先日(2014/9/18)に Ruby 2.2.0 preview1 が出ましたね! Ruby 2.2.0-preview1 リリース いくつか新しい機能も増えていたので、気になったものをご紹介します!(詳細な変更内容はこのページで確認することができます。) ついに来ました!恒等関数: Kernel#itself いわゆる恒等関数と呼ばれる、自身 (self) をそのまま返すメソッド Kernel#itself が追加されました。 他の言語でも恒等関数が組み込みで存在する場合があり、id や identity などの名前で定義されていることが多いです。「名前重要!」の Ruby では恒等関数の導入案は以前からありましたが、名前がなかなか決まらなかったという経緯が
Rubyのメソッド引数は、デフォルト値がセットできたり、可変長引数にできたり、キーワード引数を渡せたり、多彩なわけですが。今日、tcoというターミナル出力に色を付けるライブラリのソースを眺めていたら、面白い引数の使い方に出会って。ちょっとこれ問題にしてみようかと。もしかしたら常識かもしれません。 ─ 問題1 ─ 配列を取り最初の3つの要素だけを返すメソッドfirst_threeを定義しなさい。具体的には、以下の挙動になる。 first_three 1 # => [1, nil, nil] first_three [1] # => [1, nil, nil] first_three [1, 2] # => [1, 2, nil] first_three [1, 2, 3, 4, 5] # => [1, 2, 3]
プログラミングをより深く理解するための近道は、プログラミング言語を実装してみること。SchemeのサブセットをRubyで実装していくことで、プログラムはどう実行されるのか、その基本がはっきり分かります。 ※本書はCC BYにより配布されています。上記の「買い物かごへ」ボタンからは有償で購入できます。無料で入手したい場合は、下記リンクよりダウンロードしてください。なお、有償版も無償版も内容は同一です。 EPUB版PDF版内容紹介プログラムは書けても、その基礎となっている計算機科学(コンピュータサイエンス) の理解があやふやな人を、著者は多く見てきました。プログラミングに自信があるという人が、もう一歩先に進める道を示したいというのが、この文書を書き始めた動機です。 この文書を読むことで次の効果が得られることを期待しています。 プログラミング言語とは何かを深く理解することで、プログラミングのレベ
と思いません? def foo(x) end foo(1, 2) #=> wrong number of arguments (2 for 1) (ArgumentError) 1.step(10, 0) { } #=> step can't be 0 (ArgumentError) a = []; a << a a.flatten #=> tried to flatten recursive array (ArgumentError) 確かにどれも Argument に関する Error ではあるんだけど *1 、全部同じ例外クラスというのは粗すぎですよね。メッセージ読めば意味はわかるからデバッグには困りませんが、ArgumentError の中の特定の例外だけ拾いたいときに困ります。 具体的には、テストです *2 。例えば foo(1, 2) で wrong number of arg
どれが何なのかたまに混乱するのでメモ. == オブジェクトの同値性のチェック クラスやオブジェクトの性質に合わせて再定義できる === オブジェクトの同値性のチェック(所属性を加味) case式で使われる クラスやオブジェクトの性質に合わせて再定義できる eql? オブジェクトの同値性のチェック(==より厳密) Hashで二つのキーが等しいかどうかを判定するのに使われる クラスやオブジェクトの性質に合わせて再定義できる 再定義した場合はhashメソッドも再定義しなければならない equal? オブジェクトの同一性のチェック object_idが一致するかどうかを調べる 再定義してはならない 比較表 効果使用場面再定義 ==同値性のチェック同値性のチェック○ ===同値性のチェック(所属性)case式○ eql?同値性のチェック(厳密)Hashキーの比較○(※) equal?同一性のチェック
== 数値、文字列、配列などで、「等しいかどうか」「同じ内容かどうか」を調べるのに使います。別のオブジェクト(別のインスタンスへの参照)でも同じ内容ならtrueになります。 Rubyでは数値と文字列の間の自動変換は行われませんので、1 == "1"はfalseです。整数と浮動小数点数の間では自動変換が行われ、1 == 1.0はtrueになります。 自作のクラスのオブジェクトどうしを ==で比較したいときは、==メソッドを定義します。==を定義しないと、equal?と同じく「同じオブジェクトかどうか」になります。 == equal? 常に「同じオブジェクトかどうか」を調べるのに使います。自作のクラスでequal?を定義してはいけません(定義できてしまいますが)。 Javaでは、Stringなどのequalsメソッドは「同じ内容かどうか」を調べるもので、Rubyと逆です。 equal? ===
Ruby用拡張ライブラリをCで作る Rubyは、C(あるいはC++)で書いたコードを動的(あるいは静的)にリンクして利用する事ができる。うまく使えば、Rubyで書くより高速な動作が期待できる。 たとえば、GUIライブラリである「Ruby/GTK」は、描画部分にCで書かれたライブラリを利用する事で、実用的な画面描画速度を確保している。 その、Ruby用拡張ライブラリをCで書く方法である。 ■ 拡張ライブラリ作成の流れ Rubyはオブジェクト指向言語である。オブジェクト指向言語におけるプログラムとは、基本的にクラス定義である(と、少なくとも私は思っている)。そこで、ここではクラス定義に話を絞る。 メソッドの実体となる関数を定義する Init関数を作る rb_define_classで、新しいクラスを作る rb_define_methodで、クラスに1で作成したメソッドを追加する Makefil
gistfile1.md ぼくの考えた最強のRuby新機能案 野心的な新機能案や、互換性等の理由でおよそ採用されないであろう夢を書き連ねています。 Remove Fixnum and Bignum Fixnum と Bignum を削除して、Integer クラスに統合する。両者は Flonum のように内部的に切り替えられる。 1 / 2 is Rational Integer#/ の結果を Rational で返すようにする。 https://bugs.ruby-lang.org/issues/5512#change-37021 0.1 is Rational 0.1 を浮動小数点数リテラルでは無く、有理数リテラルにする。 http://www.slideshare.net/mrkn/float-is-legacy IANA tzname on Windows Windows で Ti
日本時間だと2013年2月7日未明のことですが、「Topaz」(トパーズ)と名付けられたPythonで実装されたRubyのバージョン0.1がリリースされました(リリースに関するブログ、プロジェクトのページ、GitHubのリポジトリ)。Ruby処理系はC、Java(JVM)、Ruby、CLI、JavaScript、Smalltalkなどによる実装がありましたが、Pythonというのは、ちょっと驚きです。ただ、Pythonといっても、Python言語で書くのが主眼なのではなく、Pythonエコシステムで高速処理を目指して作られた「PyPy(パイパイ)」の成果物の上に実装したというのがTopazのようです。現在のところコード作者リストに9人の名前が上がっていて、JRuby実装で知られるチャールズ・ナッター氏の名前も入っています。 Topazは正確にはPythonではなく、RPythonと呼ばれる
Class Variables and Instance Variables on Class, in Ruby Do you know problems around class variables in Ruby? Class variable You can declare class variables by using @@ for prefix of variable name, for instance: @@foo. Problem But, class variables can easily overwrite by subclasses. This is based on Ruby specification; class variables can be shared on its subclass. Class variables are similar with
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く