成らぬは人の為さぬなりけり

エンジニアライフをエンジョイする為のブログ

Gitのコミットメッセージを書き換えるフックをRubyで書いてみる

  • コミットメッセージにチケット番号を埋め込みたい!
  • チケット番号はブランチ名から判断してほしい

みたいな事、ありせんか?
僕はあります。

というわけで、コミットメッセージをいじるフックをRubyで書いてみたいと思います。

続きを読む

TypeScriptのAPIドキュメントをyuidocjsで自動生成

現在、仕事でTypeScriptを使っていますが、
APIドキュメントが欲しくなってきて、
JavaDocとか、RDocとか、ScalaDocとか、みたいに
自動生成させたいなぁと思い、いろいろ試してみました。

試したツール

  • jsdoc (npm)
  • JsDoc Toolkit
  • jsduck (gem)
  • yuidocjs (npm)
続きを読む

Perl勉強日誌 - FizzBuzz

Perlを勉強し始めたので、
現状の知識でFizzBuzzってみます。

PerlFizzBuzz

use 5.012;

my @fizz = qw/Fizz/;
my @buzz = qw/Buzz/;
foreach (1..100) {
  say ("$fizz[$_%3]"."$buzz[$_%5]" || $_);
}

実行結果

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
31
32
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
FizzBuzz
46
47
Fizz
49
Buzz
Fizz
52
53
Fizz
Buzz
56
Fizz
58
59
FizzBuzz
61
62
Fizz
64
Buzz
Fizz
67
68
Fizz
Buzz
71
Fizz
73
74
FizzBuzz
76
77
Fizz
79
Buzz
Fizz
82
83
Fizz
Buzz
86
Fizz
88
89
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz

その他の回答

こんな風に書けるらしい

print+(Fizz)[$_%3].(Buzz)[$_%5]||$_,$/for 1..100

プログラミング言語/Perl - プログラミングスレまとめ in VIP

まだまだ修行が足りん、、、

おまけ

ついでにRubyでもFizzBuzzってみます。

def fb i
  (s="#{[:Fizz][i%3]}#{[:Buzz][i%5]}").empty? ? i.to_s : s
end

p (1..100).map{|i| fb i }

実行結果

["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz", "16", "17", "Fizz", "19", "Buzz", "Fizz", "22", "23", "Fizz", "Buzz", "26", "Fizz", "28", "29", "FizzBuzz", "31", "32", "Fizz", "34", "Buzz", "Fizz", "37", "38", "Fizz", "Buzz", "41", "Fizz", "43", "44", "FizzBuzz", "46", "47", "Fizz", "49", "Buzz", "Fizz", "52", "53", "Fizz", "Buzz", "56", "Fizz", "58", "59", "FizzBuzz", "61", "62", "Fizz", "64", "Buzz", "Fizz", "67", "68", "Fizz", "Buzz", "71", "Fizz", "73", "74", "FizzBuzz", "76", "77", "Fizz", "79", "Buzz", "Fizz", "82", "83", "Fizz", "Buzz", "86", "Fizz", "88", "89", "FizzBuzz", "91", "92", "Fizz", "94", "Buzz", "Fizz", "97", "98", "Fizz", "Buzz"]

Perl勉強日誌 - スマートマッチ

お久しぶりです。
しばらくブログ書いてませんでした。
(単純にさぼってました。。。orz)

諸事情ありまして、Perlを勉強し始めたので、
ログを残して行きたいと思います。

環境

追記

スマートマッチは現在非推奨だそうです。
perl5180delta - perl v5.18.0 での変更点 - perldoc.jp
残念、、、、orz
(なんとなく、そんな気もしてましたがw)

今日のテーマ

リャマ本:15章

スマートマッチ

それ何?

Perlさんがスマート(賢く)にマッチしてくれる演算子
らしいです。

つまり値の種類によって、いろいろ良い感じに比較してくれる、と。

スマートマッチ演算子は、Perl5.10.0で登場したそうですが、
問題があったらしく、Perl5.10.1でfixされたそうです。
その為、

use 5.010001;
# use v5.10.1; の方が良いのか????

とするのが、良いそう。

スマートマッチ演算子

では実際に使ってみます。

my $hoge = "hello, world!!!";

say "matched regex" if $hoge ~~ /hello/; # ①
say "matched string" if $hoge ~~ "hello, world!!!"; # ②

上記の

 ~~ 

これが「スマートマッチ演算子」です。


上記①の場合、
右辺が正規表現なので、正規表現で比較されています。
つまり、

$hoge =~ /hello/

と同じ事になるはず。

上記②の場合、
右辺が文字列なので、文字列として比較されています。
つまり、

$hoge eq "hello, world!!!"

と同じ事になるはず。

その他の比較

以下のページを見れば、どんなマッチが出来るか記載されています。
perlop - perldoc.perl.org

まとめ

つまり、スマートマッチ演算子は、

値の種類によって比較方法が変わる演算子

という事。(な気がしている)

しかし、全部覚えきれる気がしないし、
なんか便利によしなってくれる機能って、
もっと深く理解しないと、怖くて使えない、、、
という気がしています。

どうでも良いこと

Perlやり始めて、Rubyと似てる部分や
自分が知っている他の言語と違う部分だったりを見つけて、
改めて、いろんな言語・文化・思想に触れるのは大事だな、と感じています。
しばらくはPerlerになりそうなので、
しっかり勉強して、ログを残して行く所存です。

Ruby2.0の新機能を勉強してみる その3 Refinements

前回に引き続き、
Ruby2.0の新機能のお勉強です。

今回は、実験的に追加された機能である「Refinemens」をやってみようと思います。

今回のテーマ

「Refinements」

環境

続きを読む