Make the Most of IT.

お酒と映画が好きなJava屋さんがRubyとか学んだこと感じたことをつらつらと

【感想】これからのキャリアの航海図 SOFT SKILLSを読んでみて

はじめに

以前から読んでいました「SOFT SKILLS」を読み終わりました。

SOFT SKILLS ソフトウェア開発者の人生マニュアル

SOFT SKILLS ソフトウェア開発者の人生マニュアル

結論から言うとかなり面白かったです!
事前情報で知ってはいましたが、まさか本当に不動産投資や筋力トレーニングについて詳細に書かれているとは思いませんでした。

この本について

この本の副題に「ソフトウェア開発者の人生マニュアル〜フリーで身を立てる方法から、恋人の作り方まで」とあります。この副題にある通り、ソフトウェア開発者としてどのようにキャリアを形成すると成功することができるのかということから不動産投資などの資産運用、また筋トレや恋人の作り方まで盛りだくさんの内容となっています。

本の感想

この本は全部で7つのパートに分かれています。

  • 第1部 キャリアを築こう
  • 第2部 自分を売り込め!
  • 第3部 学ぶことを学ぼう
  • 第4部 生産性を高めよう
  • 第5部 お金に強くなろう
  • 第6部 やっぱり体が大事
  • 第7部 負けない心を鍛えよう

各パートの感想を書いていきます。

第1部 キャリアを築こう

このパートではソフトウェア開発者のキャリア形成においてどのような道があるのか、またその道でうまくやっていくためにはどうすれば良いのかが書かれています。

中でも目を引いたのが、第16章の「うまくやり遂げるまではできたふりをしよう」です。

これは決してネガティブな思考ではありません。

今後自分の持っていないスキルを要求されることがあっても、自分はうまくやり遂げることができる、と自分に思い込ませてできたふりをすることでそのスキルが身につき、いずれ本当にできるようになるのです。

実際に今私のスキルは様々な面で足りていると言うことはできませんが、「うまくやりとげるまでできたふりをする」ことでスキルをキャッチアップしていきます。

第2部 自分を売り込め!

このパートでは自分をマーケティングする方法について書かれています。
例えばブログやSNS、講演会出演などなど

僕は自分をマーケティングしようとこのブログやTwitterを始めたのですが、今のところ全くマーケティングできておらず反省中。。。

もう一度このパートを読み直して気合い入れ直します!

第3部 学ぶことを学ぼう

このパートでは筆者の勉強方法について書かれています。

これは以前のブログでも触れましたが、僕の勉強法が間違っていたんだなと改めて自覚させてくれる内容でした。

勉強をすると言う行為のために勉強していたので、ほとんど身になる勉強ができていなかったなと。。。

そんな反省をさせてくれたパートでした。

第4部 生産性を高めよう

このパートでは生産性を高めるために筆者が行なっている手法を紹介しています。

このパートもかなり心に刺さります。

だってテレビは見ちゃうしゲームもずっとしちゃうよね。。。

でもそれではいかんのです!集中するときは集中する!

10分とか20分とか「ゾーン」に入って生産を高めていこうと思います。
今で言えば勉強にこの「ゾーン」を使っていきたいですね。

第5部 お金に強くなろう

まさか開発者向けの本に不動産投資のことが書いてあるとは(笑)
中でも興味深かったのが筆者が33歳で引退できた理由を赤裸々に綴っているところです。

筆者は開発者として働く一方で不動産投資を行い、ついには33歳で「お金」に縛られない自由を得ています。

順風満帆だったわけでは決してなくピンチも多くありましたが、そのピンチを切り抜けることができるほどの努力をされていました。

僕も努力から逃げるのそろそろやめねば。。。

第6部 やっぱり、体が大事

このパートでは体の鍛え方、モチベーションの保ち方について書かれています。

これはこれまでのパートにもあったのですが、何事も習慣化することが大事ですね。

これを読んでランニングしようかな、と思った次の日が雨で結局ランニング行かずじまいです。

だって濡れたくないじゃない!

でも最近ほんと運動不足が深刻でお腹の方も。。。 真面目に運動すること考えないとな。

第7部 負けない心を鍛えよう

このパートでは、心の持ち方について書かれています。

これまでの総括のようなパートでした。

マイナス思考は良くない、プラス思考で自分に自信を持つからこそ態度も変わり、周りからの評価も高くなるのだと。

僕も学生時代はかなりのマイナス思考で根暗でした(笑)
でも最近はなぜかよくわからないプラス思考になり物事もうまく回るようになった気がします。

何かで自信がついたのかな?

とにかくプラス思考で自分に自信を持つことは本当に大切です!

まとめ

ということで、「SOFT SKILLS」についての感想を簡単にまとめてみました。

今の自分にモヤモヤしている僕にかなりザックリと刺さる内容の本でした。
特にマーケティングのところ。。。

この本にあるように自分の未来を思い描き、今後の開発者人生を今一度見直したいと思いました。

SOFT SKILLS ソフトウェア開発者の人生マニュアル

SOFT SKILLS ソフトウェア開発者の人生マニュアル

面白いと、読みやすい、は違うんだよ? #リーダブルコード読みました

はじめに

みなさん、こんにちは。

寒くなってきて鍋のおいしい季節となってきました。

一人暮らしなので晩御飯のメニューを考えるのがいつも大変なのですが、鍋は本当に楽でいいですね。煮込めばなんだって美味しくなりますし、何より不足しがちな野菜を大量に摂れるのがとっても嬉しいです。

ちなみに今日は生姜醤油鍋のもとに大根1本すりおろしてのみぞれ鍋でしたが、これがもう本当に絶品で。みなさんも是非お試しください。

さて今日は先日読み終わりました「リーダブルコードーより良いコードを書くためのシンプルで実践的なテクニック」の感想を書いていこうと思います。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

読もうと思ったきっかけ

これまでお仕事でコードを書く機会は多くありましたが、「読みやすさ」について意識することはつい最近になるまでありませんでした。

意識するようになったきっかけは、過去案件のクソコードを改修しなければならなくなった時です。

当時の心の叫び
なんだこのネストの深いfor文とif文のバーゲンセールは!

とか

変数名が抽象的すぎるしあちこちで使ってるから
結局何のための変数かわからへん!

等々。。。

このクソコード達は反面教師として、コードはなるべくわかりやすい名前で複雑になりすぎないようにということを僕に教えてくれました。

しかし、「本当にこれでわかりやすくなってるのか?自己満足なんじゃないか?」という疑問が次第 に湧いてくることに。。。

そこで、各所で「綺麗でわかりやすいコードを書きたいならこれを読んどけ!」と絶賛されていたリーダブルコードを手に取ってみる事にしたのです。

全体的な感想

もっと早く読んでおけばよかった!
具体的にいうとOJT中か、もしくはOJTが終わった直後くらいに!

それくらいとても参考になる本でした。

まず理解されやすいコードとはどのようなコードか?の説明から始まり、その後インデントなどの見た目、変数の名前の付け方やコメントの残し方などなど

また、何より薄い!翻訳版でもたった230ページちょっとしかありません。

翻訳前は200ページなかったというから更に驚きです。

このページ数で気軽に通しで読み直すことができます。

この本はコードを書いていく上で大事な事をすべて抽出してさらに凝縮したサプリメントのようです。

自称「頭がいいコード」は読みにくい

僕がこの本を読んで一番衝撃的だったのは、102ページにある以下の文章です。

そのときは「オレは頭がいい」と思っていたんだ。
ロジックを簡潔なコードに落とし込む事に一種の喜びを感じていた。

これ、まさに僕でした。
クソコードが反面教師となって以降、僕はとにかく簡潔に短いコードが良いと感じてい他のです。

多少の読みづらさは関係ない、簡潔で短ければそれだけで大正義だと。

そんな正義はこの本に図星をつかれるよって、いとも簡単に打ち破られてしまいました。

改めて当時の自称「頭がいいコード」を読み直してみましたが、わかりづらいのなんのって。
下みたいなコードを書いていました。。。

String exeMessage = isValid() || (hasObservers() && shouldMigrate()) ? "実行します" : "中断します"

三項演算子の中で条件判断用のメソッドをいくつも呼び出しているので、それぞれのメソッドの結果を同時に考えながら読み解いていかなければなりません。

これはこのように書き換えると、わかりやすくなります。

boolean isExe = hasObservers() && shouldMigrate()
String exeMessage = isValid() || isExe ? "実行します" : "中断します"

この場合の"isExe"を説明変数と言います。

最後に

という事で、読了したリーダブルコードについて感想を書いてみました。

本当にもっと早く読みたかったほどの名著でした!

次は噂のCODE COMPLETEを読んでみたいなぁ。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

Ruby勉強します! #なんて便利な正規表現編

はじめに

みなさん、こんにちは。

最近は本当に冬なのかってくらいの暖かさ、と言うか暑いですね。ヒートテックに切り替えて久しいですがヒートテックを一度タンスにしまい直そうかと思うくらいです。

でも週末から今度は1月末並みの気温になるそうなので、気温のジェットコースターに頑張って耐えたいと思います。

さて、今回は正規表現です!

正規表現自体はマスターすればかなり強力な武器になるとは思いつつも、あの呪文のような式に怖気付いちゃってました。

しかし、わかりやすい解説と例題のおかげですっかりその苦手意識もなくなり、今では実務でもかなり役に立っています!

参考にさせていただいたのは毎度おなじみ、伊藤淳一さん(@jnchito)の「プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発デバッグ技法まで 」です。

またチェリー本内でも紹介されていましたが、下記Qiita記事も参考とさせていただきました。

初心者歓迎!手と目で覚える正規表現入門・その1「さまざまな形式の電話番号を検索しよう」 - Qiita
初心者歓迎!手と目で覚える正規表現入門・その2「微妙な違いを許容しつつ置換しよう」 - Qiita
初心者歓迎!手と目で覚える正規表現入門・その3「空白文字を自由自在に操ろう」 - Qiita
初心者歓迎!手と目で覚える正規表現入門・その4(最終回)「中級者テクニックをマスターしよう」 - Qiita

文字を指定する

文字を指定する場合は、下記の記号を用います。

記号 意味
. 任意の一文字
* 直前の文字の0回以上の繰り返し
+ 直前の文字の1回以上の繰り返し
¥d 数字1文字
¥w アルファベット、数字、アンダースコア (_) のどれか1文字
¥s 半角スペース、タブ、改行のどれか1文字
¥n 改行
¥t タブ

Ruby正規表現を扱う

RubyではStringクラスに正規表現を扱うための便利メソッドが用意されています。

scan

scanメソッドは引数で指定した正規表現にマッチした部分を配列に格納して返却します。

'123 456 789'.scan(/\d+/)
  #=>["123", "456", "789"]

gsub

gsubメソッドは第1引数に指定した正規表現にマッチした文字列を、第2引数の文字列で置換します。

text = "文 字 の 隙 間 を 埋 め ま す"

text.gsub('¥s', '-')
  #=> "文-字-の-隙-間-を-埋-め-ま-す"

さいごに

ということで、これまでなかなか手をつけることができなかった正規表現について学びました。

やはり正規表現は身につけると強力な武器になりますね!
普段の業務でもかなり威力を発揮してくれています。

次の章はいよいよクラスについて学びます!

Ruby勉強します #ハッシュとシンボル

はじめに

みなさん、こんにちは。
よく行く喫茶店のリニューアルオープンが火曜 (Tue) かと思ったら木曜 (Thu) でコーヒーを飲み損ねました。まるです。

さて、Rubyのお勉強記事も3回目となりました。
今回はJavaでは馴染みのないハッシュとシンボルを勉強しましたのでご紹介いたします。

今回も参考にさせていただいたのは伊藤淳一さん(@jnchito)の「プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発デバッグ技法まで 」です。
本当にわかりやすく、また非常に親しみやすい文体なので内容がスッと頭の中に入ってくる良著です。

シンボル

シンボルとは?

シンボルとは高速に処理できる"文字列っぽい"ものです。
"文字列っぽい"とはどういうことでしょうか。まずシンボルと文字列の定義方法について見てみましょう。

#シンボル
:Ruby
#文字列
'Ruby'

文字列はシングルクォート (') で囲うのに対し、シンボルは先頭にコロン (:) をつけて宣言します。宣言の方法が異なるだけでコード上は同じ"Ruby"なので文字列のように解釈することができますね。
また、シンボルはRuby内部で整数として処理されるため、文字列と比較して高速に処理することができます。

次に、シンボルと文字列のオブジェクトIDを比較してみます。

#ハッシュの場合
 :ruby.object_id=> 652188
 :ruby.object_id=> 652188
 :ruby.object_id=> 652188
#文字列の場合
'ruby'.object_id=> 70109716648080
'ruby'.object_id=> 70109712391480
'ruby'.object_id=> 70109712386020

比較結果を見ていただくとわかる通り、シンボルの場合は同じシンボルの場合は全く同じオブジェクトとなります。このため、宣言のたびに新たにメモリが確保される文字列と異なり、シンボルはメモリの使用効率が良くなります。

また、シンボルはイミュータブルなので破壊的なメソッドを実行するとエラーとなります。

以上より、シンボルは文字列と同じようにプログラマにとって理解しやすいものながらも、処ハッシュは文字列より処理速度やメモリ管理で優れたオブジェクトであることがわかりました。

ハッシュ

ハッシュとは?

ハッシュとは、キーと値を組み合わせてデータを管理するオブジェクトです。
Javaで言うところのMapに近いものでしょうか。 まずはハッシュの宣言方法から見てみましょう。

#ハッシュを定義するには{}を使います
{Key1 => Value1, Key2 => Value2}

#ハッシュは改行して書くこともできます。
#改行した方が見やすいですね。
{
  Key1 => Value1,
  Key2 => Value2,
}

データを取得する場合は、ハッシュが格納された変数名の後に[キー]で取り出せます。存在しないキーを指定した場合はnilが返ります。 また、データを追加・変更するときには特別なメソッドを呼ぶ必要はありません。JavaのMapにデータを追加する場合はadd()などを呼ぶ必要がありましたがハッシュではその必要はありません。

sampleHash = {Key1 => Value1, Key2 => Value2}

#データを取り出すとき
sampleValue = sampleHash['Key1']

#新たにデータを追加する場合
sampleHash['Key3'] = 'Value3'

#既にあるデータを変更する場合
sampleHash['Key1'] = 'VALUE1'

ハッシュとシンボル

文字列の代わりにハッシュを

ここまで例として書いてきたハッシュのキーを見てください。すべてシングルクォートで囲まれた文字列になっています。
冒頭でまとめたシンボルについて思い出してください。「ハッシュは文字列より処理速度やメモリ管理で優れたオブジェクト」です!
ハッシュのキーには文字列の代わりにシンボルを使用することができます。 キーにハッシュを指定して宣言する場合は下記のようになります。

#シンボルを使用したハッシュの宣言
sampleHash = {Key1: 'Value1', Key2: 'Value2',}

#値にもシンボルを使用することができる
#コロンが向き合うのでなんか変な感じ
sampleHash = {Key1: :Value1, Key2: :Value2}

さいごに

と言うことで、今回はハッシュとシンボルについて見ていきました。
ハッシュについてはキーと値でJavaで言うところのMapみたいなものかなと思いながら見ていったので親しみやすかったですが、シンボルについてはJavaでは見たことない?オブジェクトだったので新鮮でした。
しかし、文字列のように使用できるのに文字列よりも高速でしかもメモリを圧迫しないと言うのはとても便利だと思います!

次のテーマは正規表現です。
正規表現は使いこなせれば強力な武器になるとは思ってはいるんですが、なかなか本格的に勉強できていない分野です…
これを機会に正規表現をマスターして業務でもどしどし活用していきたいと思います!

【PowerShell】ForEach-Objectの要素をInvoke-Commandの引数へ同じ値を複数回指定する方法

はじめに

みなさんこんにちは。
ブログに書きたいことが溜まってきて嬉しいやら悲しいやらです。
その中でも今日かなりハマった、PowerShellInvoke-Commandで同じ単語を何度も渡したい時やり方について残しておこうと思います。
何事も鮮度って大事。

先に結論を書いておくと、↓のようにしたら大丈夫です。

$array = @("hoge","huga")

$array | ForEach-Object -Process{
  Invoke-Command TergetServer -ScriptBlock {    c:\Test\$args\$args.ps1} -ArgumentList $_
}

やりたかったこと

お仕事中に自動化ツールを作ることに。
その中でPowerShellでいくつかのフォルダ内に入っているフォルダ名と同名のファイルを実行することになりまして。
ForEach-Objectでぐるぐるしている間にInvoke-Commandへ各要素を引数として渡せばいいんでしょう?ということGoogle先生にご教示いただいて↓のように書きました。

$array = @("hoge","huga")

$array | ForEach-Object -Process{
  Invoke-Command TergetServer -ScriptBlock {    c:\Test\$args[0]\$args[0].ps1} -ArgumentList $_

Invoke-Commandに引数を渡すときは配列になるんだよね!ってことで意気揚々と実行するとエラーが。。。

エラー内容は「c:\Test\hoge\hoge[0].ps1は見つかりません。」

解決策

ん?最初の引数はうまく「hoge」になってるのに2個目の引数に「[0]」が残っちゃってるよ?

てことで残ってるなら取っちゃえばいいじゃんの精神で↓のように修正。

$array = @("hoge","huga")

$array | ForEach-Object -Process{
  Invoke-Command TergetServer -ScriptBlock {    c:\Test\$args\$args.ps1} -ArgumentList $_
}

無事hoge、hugaのスクリプトを実行することができました!

終わりに

ということで、今日ハマったPowerShellでForEach-Objectぐるぐる中にInvoke-Commandへ要素を引数として何度も渡す方法について書いて見ました。

先輩に大見得切って「これぐらいの自動化ツールなら今日中にできますよ!楽勝ですよ!」っていっちゃってハマっちゃったもんだからかなり焦りました。。。

あまり触ったことないもので大見得切ってはいけません。
そう胸に刻み付ける僕でした。

Ruby勉強します #Minitest

はじめに

前回から始めておりますRubyのお勉強です。
今回は開発において重要な事柄の一つ、テストについて勉強しました。

Rubyには標準でテスティングフレームワークが組み込まれているんですね。
その中でも紹介されていたMinitestについて学習しました。

前回に引き続き、伊藤淳一さん(@jnchito)の「プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発デバッグ技法まで 」を参考にさせていただきました。

テストコード

まずは実際のテストコードから見てみます。

require 'mintiest/autorun' #1

class SampleTest < Mintiest::Test
  def test_sample #2
    assert_equal 'RUBY', 'ruby.upcase' 
  end
end

#のついている箇所が特に重要です。
classや継承などもかなり重要ですが、もうしばらく後に学習予定です。

#1 ライブラリを読み込む

require 'minitest/autorun'

requireは標準ライブラリを読み込むためのキーワードです。
minitestは組み込みライブラリでないため、requireで明示的に読み込む必要があります。

Javaで言えばimportに当たるでしょうか。
Stringはimportしなくてもいいけれど、Listはimportしないと使えないといった感じです。

#2 実行結果比較用メソッドを定義する

  def test_sample
    assert_equal 'RUBY', 'ruby.upcase' 
  end

まずメソッド名ですが、Minitestは"test"から始まるメソッドを実行するので、メソッド名の頭に"test"をつけることが必須です。

実際の比較はassert_equalメソッドにて行なっています。
Javaでいうと、Junitのassertメソッドのようなものですね。

また、Junitと同様にMinitestにもassertに複数の種類があります。

Minitestの比較メソッド
#それぞれの引数が等しければOK
assert_equal a,b

#引数が真ならばOK
assert a

#引数が偽ならばOK
refute a
Junitの比較メソッド
// asser_equalと同じ
assertEquals(a,b);

// assertと同じ
assertTrue(a);

// refuteと同じ
assertFalse(a);

実行結果

テストコードがかけたら実行して見ます。

Run options: --seed 64846

# Running:

.

Finished in 0.000631s, 1584.7860 runs/s, 1584.7860 assertions/s.

1 runs, 1 assertions, 0 failures, 0 errors, 0 skips

実行結果でまず見るのは最下行です。
それぞれの意味は以下となっています。 |キーワード|意味| |-|-| |run|実行したテストメソッドの件数| |assertions|実行した検証メソッドの数| |failures|失敗したテストメソッドの件数| |errors|検証中にエラーが発生したテストメソッドの数| |skips|skipメソッドによりskipされたテストメソッドの件数|

failuresとerrorsが0となっていればそのテストはすべてOKということになります。

最後に

ということで、Minitestについて学習したことをまとめてみました。
Javaと違い、元からテスティングフレームワークが組み込まれているということで、テストがより重要視されているなと感じました。
比較メソッドも上にあげたもの以外にもあるようなので、ゆっくりと見ていきたいと思います。

Ruby勉強します #Ruby基本・データ型編

はじめに

業務ではもっぱらJavaを使っていますが、他の言語も学んでみたいなってことでRubyを学んでみようと思います。

Rubyを勉強するために色々な参考書があったのですが、各所で絶賛されていた伊藤淳一さん(@jnchito)の「プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発デバッグ技法まで 」をもとに勉強してみます。

今日はまず第2章で取り上げられていたデータ型についてまとめてみたいと思います。普段はJava屋さんなのでJavaとの違いを織り交ぜながらまとめていければ。。。

Rubyの基本

すべてがメソッド

Rubyは数値から文字列、真偽値やnil (Javaで言うところのnull) まで全てがオブジェクト、つまりメソッドを呼び出すことができます。

つまりこう言うことができます。

#数値を文字列へ
1.to_s     # => "1"

#trueを文字列へ
true.to_s  # => "true"

#nilを文字列へ
nil.to_s   # => "nil" 

メソッドの呼び出し方

Javaでは考えられないメソッドの呼び方です! これだけでRubyって面白い!ってなってしまいました。

また、メソッドの呼び出し方も比較的自由担っています。 引数の括弧を外すことができるだけでなく、引数がなければメソッド名だけでメソッドを呼び出すことができるのです。 一般的にはどの呼び出し方が浸透しているんでしょうか。 Java屋さんからすると括弧があった方がしっくりきますが括弧は無い方が見やすかったりするんでしょうか。

文の区切り

Javaでは文末にセミコロンがないと文が終わってないとみなされ、コンパイルエラーが出ていました。Java習いたての頃は結構セミコロンがなくてコンパイル通らないってことがありましたよね。

でもRubyではセミコロンなしで改行するだけで文の区切りと見なされます。 一応セミコロンも使用する事ができ、1文に複数の文を入れたい場合に、文ごとの区切りとして使用されます。

#セミコロンで1文に複数文を入れる
1.to_s; 10.to_s(16)

変数宣言

RubyJavaと異なり、動的型付けで変数名の前に型を書くことはありません。 静的型付けで慣れてる僕からしてみると、この変数にどんな型のデータが入ってくるか宣言箇所を見るだけではわからないんじゃないの?と思ってしまいました。

また、Rubyはスネークケースで書きます。これもキャメルケースで書くJavaとの違いですね。 キャメルケースで書いてもエラーとなることはないようですが、一般的ではないようです。 少しずつ慣れていかなければ。。。

文字列

文字列はシングルクォート (') およびダブルクォート (") で囲みます。ダブルクォートで囲むことで式展開を行うことができます。 JavaではString.format()を使用することで式展開を行なっていましたが、Rubyでは特にメソッドを使用することなく式展開を行うことができるんですね。 普段は文字列の中に変数を埋め込む時は+を使って結合していたんですが、どうやら可読性が良くないみたいですね。。。 式展開に徐々に慣れていこうと思います。

name = 'Alice'
puts "Hello,#{name}!"  # => Hello,Alice!

数値

RubyにはJavaでの++のようなインクリメント演算子はありません。その代わり+=や-=を使用します。 この記法はJavaでもあったので馴染みがありますね。

真偽値

Rubyの真偽値はfalseまたはnil以外はすべて真となります。 if文の条件判断にtrueはもちろんのこと、数値や文字列が渡されても真となると言うことです。

Javaではtrueとfalseでの条件分岐しか行なって来なかったのでこれはかなりのカルチャーショックです。慣れるまでif文の解読に苦労しそう。。。

if文

条件分岐の記法がJavaと少しだけ違います。 それは「else if」を「elsif」と記述すること。 「else」の末尾「e」がなくなっています。 いつもの癖でついeを書いてエラーになる未来が今から見えます。

メソッド定義

メソッドを定義する時は頭にdefをつけて、終わりにはendをつけて宣言します。また、メソッドも変数宣言と同じくスネークケースで記述します。

def add(a, b)
  a + b
end

変数宣言時でもそうでしたが、ここでも動的型付けとなっています。 上記メソッド宣言を見てもわかりますが、引数にも戻り値にも型が書いていません。静的で慣れてる僕としてはここでも苦戦しそうです。

また、戻り値にreturnも不要です。 戻り値となるのは最後に評価された式です。 上記ではa + bですね。

returnもないわけではなく、式の途中で脱出する場合に使われます。

def add(a, b)
  return '引数を指定してください' if a.nil? || b.nil?

  a + b
end

終わりに

と言うことで、「プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発デバッグ技法まで 」をもとに勉強した内容をRubyの基本とデータ型についてまとめてみました。

Javaと比較しながら見ていくと、巷でよく言われている通り、Rubyはかなり自由度が高い言語のようです。入門しやすいといいますか。

今後もどんどん勉強を進めていきたいと思います!