Rubyまとめver5

今回は主に表にしてみました。

【こちらにRubyチート表(画像)を作成しました。】

Rubyチート表
RubyCheatTable
  1. 画像を保存して、印刷して使います。
  2. 右下の反転しているものが問題です。
  3. 右下を折ります。
  4. 裏紙にソラで答えを書きます。
  5. 答え合わせをします。

できるだけ画面いっぱいに印刷したい場合はこちらをご覧ください。完ぺきではないですが、プリンターに依存せずサクッとできます。下記ページの4番からです。

主な操作対象

操作対象7つ引数
String文字列
Integer数字(小数点とかは別である)
Array配列
Hashハッシュ(連想配列)
Boolean真偽値
NewObjectNewインスタンス(gemやライブラリなど)
RegEx正規表現

Rubyメソッド想起文字列27 → 24

Rubyメソッド想起文字列27
🔍”_Utf8とJisとココアとinsert + _\r\n”.gsub()13 12
🔍[ [ 2, 3, 1 ], [ 1, 2, 3 ], “uniq”, “insert <<“, “uniq” ].each.with_index(i)15 13 12

文字列メソッド13 → 12(答え)

String#methods
scan()
match() (ついでにmatch()?も覚えておく)
index()
slice() (ついでにslice!()も覚えておく)
strip
require “kconv” の toutf8メソッド
upcase
downcase
unicode_normalize(:nfkc)
insert()
+ 連結
gsub()(ついでにsubも)
split()

配列メソッド15 → 13 → 12(答え)

Array#methods
index()
grep()
flatten
shuffle
sort
reverse
uniq
compcat
insert()
<<
each
with_index(i)
to_s
join()
inspect

str万能メソッドとarrアクセスメソッドと5つ引数

記述[2][3..5][2, 0]
[3, 1]
[2, 2以上]
[“str”][/reg/]
Stringstr[] = “”
Arrayarr[] = “”

探索

探索ターゲット

何を探すの?(3つの探索ターゲット)
インデックス番号
文字列
正規表現パターンマッチ

探索メソッド

String探索メソッド引数
scan()strまたはreg
match() と match?()strまたはreg
index()strまたはreg
slice()strまたはreg
Array探索メソッド引数
index()strのみ
grep()strまたはreg

基本処理のスキルアップ1行6項目

array.each { | reg | if (><, ||, &&) }
1繰り返し
2条件分岐
3正規表現
4演算子
5論理式
6条件式組み立て

File IO

モード記述
読込File.read ( “test.txt” )
書込File.write ( “test.txt”, str )
追記File.open ( “test.txt”, “a” ) { | file | file.puts(str) }

直感メソッド

メソッド
nil?, empty?
even?, odd?
keys, values
size, length, count
class, methods, respond_to?( “method” )

合言葉

合言葉
1目的
2細分化
3CRUD
4自分の鉄板
5冗長上等!

元も子もないのですが…

『本当に使うものを!!』

実践するときのことを考えてしっかり落とし込まないといけません。そうじゃないとテレビやエアコンなどの家電の「誰が使うのこんな機能?へぇーこんな機能あったんだ!」になりかねません。

企業や開発者、エンジニアの自己満、ユーザー目線を捨てたモノ作りは終わりです。多くの人の場合、エアコンは設定温度とモード変更、タイマーくらいなどのいくつかの機能しか使いません。

それ以上でもなく、それ以下でもない。頑張りようのないものってあるんですね。あとはいかに安いか、頑丈か、省エネかだけです。

自分が「よし!Ruby書くぞ!」のときをちゃんと想像しているか?

こうやってまとめ記事を書くときに、人間は余計なことを書こうとする。私だけ!?

「これも書いたほうがいいな(自分はやってないけど)あれも一応載せておこう(自分はやってないけど)」という現象が起きます。

気付いて勝つ!!

例:「よし!文字列削除!」正直、ぶっちゃけ、瞬発的に実際どうします?

Googleで調べるとdeleteメソッドが出てきます。でもgsubで代替対応きくなら、いまはdelete覚えなくてもいいかな!ということで即「覚えないメソッド」に放り込みました。

あと、「gsub覚えるならsubもついでに覚えるか!」ということで上記にsub書いてますけど、実際使うかどうか…。だっていままで使ったことないですもん…。sub外すかぁ…。

はたまた「str[] = “”」という万能メソッドがありますが、「文字列削除」するときに一番最初に脳内に挙がってきません。gusbかslice!ですかね。

よって、「str[] = “”」は困ったときの万能メソッドとして覚えようと思っています。引数表は意外と使えますし。

削除するときはなぜgsubがしっくりくるか?

それはタイプだからではないでしょうか。sliceでもいいわけですよね?でもgsubを使う…。置換というもう一面を備えているから、gsubの汎用性が好きなんだと思う。下記にも書いてますが、いまのところ私のプログラミングはデータありきで、それを削って削って…という処理が多い。当てはまったものすべてを置き換えてしまうgsubは一見危険(思ってもいないところが消える)そうだが、削っていくうちに把握しているんだと思う。だから「gsubで消えるのはここだけ」ってわかっているんだと思う。さらに、だからsubを使わないんだと思う。自分の中でマッチするのはひとつでしょう!と記述の流れで感じているから。

例:「よし!文字抽出するぞ!」ってことはあまりない。

いままで自分がRubyプログラミングしてきて「文字の抽出」があまりない。不要なところを削って、欲しい文字列を取得することはあっても、いままで1、2回かな。でもsliceは結構使えそうなので覚えていてOKだと思う。あと抽出だけをする、ことがあまりないかな。eachで回して、ifで見つけて、そのまま処理することが多いから。「はい、抽出しましたけど、なにか?」ってことになりかねませんから。

例:scanは便利そうだけど、なんで使ったことがあまりないんだろう?

それは1行文字列だけを処理することが無いから。または1行文字列を処理するときはすでに検索、抽出された結果をいじることが多いから。要はscan後の文字列みたいなものを処理するのでscanを使うことが無い。

たしかにテキストファイルは複数行のことが多く、改行で区切った配列にすることが多い。そして配列をeachして、ifでmatchとかで選抜して、gsub、slice!、+などで処理するのでscanの出番があまりない。覚えるメソッドとして残すべきか?悩む。

例:「追加するぞ!」ってこともあまりない…。

私がおこなっているプログラミングがデータありきなので、削って削って結果欲しい形にすることが多い。だから、連結はあっても追加があまりない。だから、うん!これは「insertと+」だけでいいかも。

例:stripもあまりない。

それはscanと同じ考え方で抽出された後の処理をすることが多いから。既にstripされたような文字列を扱うことが多いため?便利そうなんだけどね。もしもの時は正規表現とgsubでいけそうな気がする。でも、わけのわからない両サイドをサクッと消したいときにいいかも。

例:Rubyまとめver4に書いた配列削除の「nilしてcompact」も使わない?

配列削除ということをあまりしない。「あまり」というかしたことないかな?

基本的に元データから選抜という形でいつも書いてます。以前はmap!やselect!してましたし、欲しいデータだけを取り、新配列を作成するので削除の必要が無い。だから今回初めてcompactメソッド知りました。知らなくても良かったかもしれません。いえ、本来はそんなことありません。100より100000の物事を知っていたほうがいいです。

よし!思い切ってcompactを覚えないメソッドに登録します!本記事の配列メソッドのcompactを取り消しました。

to_sとinspect、とるならどっち?

はじめてのRuby!inspectとは!?使い方を徹底解説! | 侍エンジニア塾ブログ(Samurai Blog) – プログラミング入門者向けサイト
https://www.sejuku.net/blog/77039

現時点だと「to_s」ですね。文字からも想像しやすいので。

違いがあるから、互いに存在しているのであって、いつか「inspectじゃないといけない!」ことがあるのでしょうか。

insertも思い切って覚えるのやめました…。

覚えていたら使うことにして、自分リストからは外します。

理由:いままであまり使ったことが無いけど、やりたいことはできていたから。

現時点の私のプログラミング

きっと「わかっているデータ」を相手にプログラミングをしているので、多くを覚えなくても処理が可能なのだと思います。

これが終わりがわからないデータを相手にした場合、どうなるかまだわかりません。

言っていることわからないですよね。すいません。トホホ。

「困ったときの str[] と arr[] 」は確かである。

文字通り困ったときにこれらのメソッドはとてもすごく役に立ちます。懐に持っておきましょう!