Rubyのattr_accessorって何?[和訳]

hey guy:) 前回から引き続きstackoverflowの記事を共有したいなと思ったので和訳してみた。
こちらの記事は質問者に697、回答者に1691の"いいね"されている。基本的な質問かもしれないけど読みたくなるよね!

–質問–
I am having a hard time understanding attr_accessor in Ruby.
Can someone explain this to me? I have done tons of Google searches.
I just can’t understand it fully.

訳)Rubyのattr_accessorってなんやねん。誰か説明してくれへんか?ググってもみつからへんわ〜。理解できへん。

–回答–

Let’s say you have a class Person.

Personクラスがあったとしよう。

class Person
end

person = Person.new
person.name # => no method error

Obviously we never defined method name.

明らかにnameメソッドを定義していない。

Let’s do that.

定義してみよう。

class Person
  def name
    @name # simply returning an instance variable @name
  end
end

person = Person.new
person.name # => nil
person.name = "Dennis" # => no method error  

Aha, we can read the name, but that doesn’t mean we can assign the name.

よし、nameメソッドを読み込めた。だが名前を割り当てたわけではない。

Those are two different methods.

2つの別なメソッドがある。

Former called reader and latter called writer.

前者はreaderを後者はwriterを読み込んでいる。

We didn’t create the writer yet so let’s do that.

まだ記述されていないwriterを書いてみよう。

class Person
  def name
    @name
  end

  def name=(str)
    @name = str
  end
end

person = Person.new
person.name = 'Dennis'
person.name # => "Dennis"

Awesome. Now we can write and read instance variable @name using reader and writer methods.

よっしゃ。ついにreaderとwriterメソッドを使うことによってインスタンス変数(@name)を定義して呼び出すことができた。

Except, this is done so frequently, why waste time writing these methods every time?

これはよく使われる。だが、毎回こんなに記述するって時間もったいないと思わないかい?

We can do it easier.

もっと簡単にすることが出来るんだ。

class Person
  attr_reader :name
  attr_writer :name
end

Even this can get repetitive. When you want both reader and writer just use accessor!

まだ面倒くさい感じに書かれている。もしreaderとwriterを同時に書くならaccessorを使おう!

class Person
  attr_accessor :name
end

person = Person.new
person.name = "Dennis"
person.name # => "Dennis"

Works the same way!

同じ結果が返ってきた!

And guess what: the instance variable @name in our person object will be set just like when we did it manually, so you can use it in other methods.

考えてみて。インスタンス変数(@name)はpersonオブジェクトに設定することが出来る。先程私達が頑張ってやったように。
なのでそのオブジェクトを他のメソッドからも呼び出せるよ。

class Person
  attr_accessor :name

  def greeting
    "Hello #{@name}"
  end
end

person = Person.new
person.name = "Dennis"
person.greeting # => "Hello Dennis"

That’s it. こんな感じ。  

追記)readerとwriterはそれぞれゲッター、セッターと呼ばれている。

なるほど〜。実際にターミナルで試した方が感動する!
元となるコードから辿っていくのっておもしろいね!

See you!!:)

リンク

What is attr_accessor in Ruby? - Stack Overflow

Rubyのシンボルとは[和訳]

hi, long time not to see you guys:)

Rubyのハッシュってコードの書き方はわかるんだけど、いまいちピンとこない。
stackoverflowで調べてみてなんとなくわかったような気がした回答があったので和訳してみた。

–質問–

patient1 = { :ruby => "red" }
patient2 = { :ruby => "programming" }

patient1.each_key {|key| puts key.object_id.to_s}
3918094
patient2.each_key {|key| puts key.object_id.to_s}
3918094

上記のコードってどういう意味があるんだ?

–回答–
The symbol :ruby does not contain “red” or “programming”.

シンボル:rubyに"red"と"programming"という文字列はもたない。

The symbol :ruby is just the symbol :ruby.

シンボル:rubyはただのシンボル:rubyである。

It is your hashes, patient1 and patient2 that each contain those values, in each case pointed to by the same key.

それは君が作ったハッシュでpatient1とpatient2はそれぞれにバリューを持っている。それぞれの事象であればハッシュは同じキーを示している。

Think about it this way: If you go into the living room on christmas morning, and see two boxes with a tag on them that say “Kezzer” on them.
こう考えてみよう。もしあなたがクリスマスの朝にリビングルームへ行ったとしよう。そこには2つの箱があって、それぞれに"Kezzer"と書かれているタグがついている。

One has socks in it, and the other has coal.

片方には靴下が入っていて、もう片方には木炭が入っている。

You’re not going to get confused and ask how “Kezzer” can contain both socks and coal, even though it is the same name.

靴下と木炭がそれぞれの箱に入っているが、同じ名前である"Kezzer"タグが付いていても混同しないだろう。

Because the name isn’t containing the (crappy) presents.

なぜなら名前それ自体には(くだらない)プレゼントが含まれていないからだ。

It’s just pointing at them.   

名前はただそれらを示しているだけにすぎない。

Similarly, :ruby doesn’t contain the values in your hash, it just points at them.

同様に、:rubyは貴方が記述した値はハッシュに含まれない。ただ示しているだけだ。

はは
なんかオシャレな例えだねw See you :)

記事)

Understanding Symbols In Ruby - Stack Overflow

英語のおしゃれ表現を発見

hey, guys:)!!

やばい。。最近のエンジニア業で何もできていない汗汗
I thought the current task is simple in the first place but I feel asshole what I did these days.. So I blog about the fancy English which is beyond my level.
*日本語訳)今取り組んでいる課題は簡単だと思ってたんだぜ、最初はな。でもそうは上手く行かないんだ。自分のことをassholeだと思ってしまう。だからな、今日は自分では思い浮かばない英語表現を発見したんだ。これからそのことについてブログっちゃうんだ。

単語帳でボキャブラリを増やしたり、文法書を読んで英語の構文を理解するのは英語を勉強する上で重要だと思う。 ただガチガチの英語表現しか書かれていないと実際のネイティブはどのように話しているのかイメージが遠のいてしまう。なので気分晴らしに洋画をみて実際の生きた英会話を聞いてみてはどうだろうか。はっは〜、と関心してしまう表現に出会えるはずだ。
最近私が関心した英語表現を今回は一つ紹介したい。
これは映画"Gone Girl"から発見しました。
新しい隣人に対してアメリカ人らしくフランクに話しかけるシーンです。

Brenda "Hey, neighbor. It's been weeks since I had anyone decent next door."  (隣人さん、まともな人が引っ越してきたのは久しぶりだわ)

まずこれオシャレなところが入っていると思いませんか? 私は"It's been weeks"っていうところがオシャレだなと思った。
何週間ではなく何ヶ月もしくは1年近くいなかったはず、もしくはまともな人は一度もいなかったのに数週間という風に言っているのがcool!!
その返しで新しい隣人のAmyはなんて返しただろう。
先に話しておくと日本語訳は「自分はまともなんかじゃないよ」って返していた。
自分だったら「Thank you, but I'm not like that.」とか、「Do you think so? But unfortunately I'm not...」的な感じでboringな英語表現で返していただろう。
ところがやはりAmyは違った。。

Amy "I don't know how decent I feel."  

これ、かなりcoolじゃありませんか?
ネイティブじゃないと絶対に思い浮かばない表現方法に感動した。
どこがcoolかは言葉の並べ方にあるのだと思う。
自分だったら「I don't know a feeling of decent.」とか「I've never been decent person.」といった表現で、なんかガチガチの表現にしかなりえない。

共感できますか??ww

自分の大好きな映画を何百回観たり、聞いたりするのもかなり大事な英語の勉強法だと気づいた。気に入った表現をみつけたら自分なりにアレンジして使ってみるとかなりcoolになれるよ!

See you!!:)

ストロングパラメーターで情報を制限! Ruby on Rails

Hey guys:)

ストロングパラメータで取ってくる情報を制限しよう!
まずはストロングパラメータを使ってないところから始めるお

def create  
  @article = Article.new(params[:article])  
                       .  
                       .
end

よし、それではストロングパラメータでタイトル(title)と本文(content)を取ってみよう!!

def create  
  @article = Article.new(params.require(:article).permit(:title, :content))  
                                .  
                                .  
end  

おっ!なんかストロングになった気がしません? requireとpermitって単語使っているあたりが強そう!
require(:テーブル).permit(:カラム, :カラム)っていう感じだね!

さらにメソッドにしちゃえ!!

def create  
  @article = Article.new(article_params)  
                       .   
                       .  
end  

def article_params  
   @article = Article.new(params.require(:article).permit(:title, :content))  
                       .  
                       .  
end  

みたいな感じでね!!

同ファイル内でしか呼び出さないのならprivateをarticle_paramsの上に記述して制限するのもいいかも。

See you !!:)

-Ruby on rails-migrationでデータベースの構造を変えてみよう

hi, guys:)

migrationというコマンドでデータベースの内容を変えることができる。
migrationって聞いた時は移民、移住といった言葉しか浮かばずしっくりこなかった。
それではさっそくmigrationしてみよう。
入力するのはもちろんターミナルで:)

$ bin/rails g migration add_user_id_to_myapp user_id:integer

後半の"add_user_id_to_myapp"はファイル名。
"user_id:integer"はカラム名:データ型といった感じです(integer = 整数)。
出来上がったファイル名は「20160531175330_add_user_id_to_myapp」。
前半の数字は作成時刻(タイムスタンプ)で後半はコマンドで入力したファイル名である。
ファイルの中を見てみよう。

class AddUserIdToMyapp < ActiveRecord::Migration  
  
  def change  

    add_column :myapp, :user_id, :integer  

  end  
  
end

こんな感じです。
それでは最後にデータベースに反映させよう!

$ rake db:migrate

これで自分の作成したファイルがデータベースへ移民(反映)しました。
これでmigrationの言葉の意味も結びついたはず!

See you :)

jQueryの記述方法(超超基本)

jQueryはビューで様々な動きをつけることができるのでいいんですよー。
ほら、こうやって文字をフェイドアウトさせたり、フェイドインさせたりできていいでしょ?」

うおおーーかっこいい!!ただ、それって難しいんじゃないんですか?

「そんなことないですよー。」

またまた〜、そんなこと言っちゃって...

...本当にそんなに難しくなかった。
書き方はjsに似ているけどわかりやすい!!
早速だが、下に記す。

$('セレクタ').メソッド(引数);

これが基本だ。
例えばhtmlで

<div class = "fade">こんにちは</div>

と記述したとしよう。
今回fadeクラスの中身をフェイド・アウトさせたいのでメソッドはfadeOutと記述する。
1秒でfadeクラスの中身を消したいので引数で指定してあげる。するとこのように記述する。↓

$('.fade').fadeOut(1000);

簡単だ!!
次はユーザーがクリックとかをした時にビューが反応する方法を記す。

$('セレクタ').イベント名(function(){  
   //イベント発生時に実行したい処理  
});

例えばクリック(イベント)した時に文字を消したい時...

<div id = "hide-string">文字を隠す</div>  
<p id = "string">文字を隠すボタンをクリックすると消えちゃうよ</p>

上のようなhtmlにしたがってjQueryのコードをこのように記述する。

$('#hide-string').click(function(){
  $('#string').hide();  
});

書きやすいでしょ??
最後に補足したいのはjQueryでclassを指定した場合はセレクタのクラス名の前に"."(ドット)をつける。
idを指定した場合は"#"(シャープ)をつけるという違いがあることに注意しよう!!

See you guys :)

Rubyって何?ってググって一番目の英文記事を訳してみた

Hey, guys :)

"what ruby can do"でググって一番上に出てきた記事をなんとなく翻訳してみた。

1.Make an app that texts you every time Brad Pitt tweets.  

 1.ブラッド・ピットがいつでも貴方につぶやくアプリを作れる。

2.Scrape any website on the Internet with only a few lines of code (seriously, it’s soooo easy).  

 2.たった数行のコードラインでどのウェブサイトからも情報を抽出できる(本当に超簡単!)

3.Play Hackety Hack.  

 3.Hackety Hackで遊べる。

4.Spend your days stockpiling Gems.  

 4.たくさんのGemsで日々過ごせる。

5.Make fancy client websites with awesome CMSes like Radiant CMS.

 5.かっこいい顧客のウェブサイトをいかしたCMS(Content Management System)を(例;Radiant CMS)作れる。
*CMS = コンテンツを管理するシステム / Radiant CMS = Ruby on Railsで開発された少人数向けのCMS

6.Do test driven development like the RSpec badass you are.  

 6.RSpec野郎のようにテスト駆動開発ができる。
  *RSpec = クラス、メッソドが正常に動くかテストできる機能をRailsに取り入れられるもの。

7.Teach your kids Kids Ruby.

 7.Kids Ruby を自分の子どもに教えることができる。

8.Write lines of code that actually read like English (almost): 5.times {print “Ruby is awesome!”}  

 8.コードラインを英語文のように記述できる。

9.Quickly deploy an app prototype using Heroku.  

 9.Herokuを使って素早く見本のアプリをデプロイできる。

10.NEVER WORRY ABOUT A MISSING SEMI-COLON. EVER. AGAIN.  

 10.セミコロンを入れ忘れるような不安はもうない!

11.Become a Ruby Warrior.  

 11.Ruby戦士になれる。

12.Build a Twitterbot that tweets sweet things to people having a bad day.  

 12.嫌な日を過ごした人たちへ優しい言葉をかけるツイッターBotを作ることができる。

13.Become a RailsGirl.  

 13.Rails少女になれる。

14.Gain more masculine confidence, courtesy of Paul Dix & Thundergod.  

 14.もっと男として自身をもち, Paul Dix & Thundergodの作法を身につけることができる。
 (Paul Dix & Thundergodって何だろうw)

15.Work on Basecamp, Shopify, Urban Dictionary, Slideshare, White Pages, Hulu, Twitter, or one of the thousands of websites built with Ruby.  

 15.Rubyで設計されたBasecamp, Shopify, Urban Dictionary, Slideshare, White Pages, Hulu, Twitterといった超巨大企業で働くことが出来る。

16.Make an average salary of $102,000! That’s the average salary of a Ruby software developer according to Indeed.com’s salary calculator. Whaaaat.

 16.Indeed.com'sの調査によるとRubyソフトウェア開発者の平均年収は$102,000!なんだっってーー!

17.Work with a programming language that is designed to make YOU happy.  

 17.プログラム言語と仕事するのは貴方の人生を幸福にする。

リンク

17 Awesome Things To Do With The Ruby Programming Language | Skillcrush

うーーん所々うさんくさいんだけど、英語にするとなぜか説得力があるように聞こえる...
日本語に慣れすぎてしまっているんだろうか?ネイティブ並みに英語が理解出来れば同じようにうさんくさいって思うのだろうか?
bryanのwebエンジニアと英語の修行はまだ続く...