酒とギャンブルと俺と妻

なんでもかんでもみんなブログで綴っているよ

【Ruby】論理演算子について

32歳で未経験からWEBエンジニアへ転職活動しています。
有益な情報あったら何でもください!(パソコンを閉じて)

転職活動する中でコーディングテストで躓く場面が多かったので
下記書籍を通じてRubyを勉強しています。
amzn.to

今回はRubyで書く論理演算子について書いていきたいと思います。

まず論理演算子とは下記を読んでください。
ja.wikipedia.org

すいません。難しすぎて訳わかりませんね。

じゃあ私の口から簡単に。
ズバリ!
複数の条件を満たしているかどうかを判別する。
だと思っています。

例えば山田くんという男の子がいて
45歳ですが彼女が出来たことがありません。

友達が心配して彼にどんな子が良いのか聞きました。
彼の求める条件は下記2つでした。
①顔が可愛い
②おっぱいが大きい
どっちも満たす女の子が良いと。

おいおい山田くん。そんな娘なかなかいないよと。
どっちもじゃなくて片方の条件満たす娘にハードル下げてみたらと。
①か②のどちらか一方を満たす女の子はどうと。

山田くんはとにかく彼女が欲しくて
友達の提案を飲み、条件を以前よりは低くし彼女を探しました。
しかし中々いません。
前の条件はがダメなら、下記条件のどちらか一方を満たす女の子なら良いと。
③性格がやさしい
④髪が黒い
①、②どちらか一方を満たす、もしくは③、④どちらか一方を満たす女の子が良いと。

それでも山田くんは彼女ができませんでした。
山田くんは彼女が出来ることが目的になってしまい最終手段にでます。
今までの条件に当てはまらない女の子なら誰でも良いと。
①、②、③、④のどれにも当てはまらない女の子と。

そしたら、ついに山田くんに彼女ができました。
めでたしめでたしと。

とここまで見てきた山田くんの女の子に求める条件。
コレをクリアにするために判別する式が論理演算子です!

では実際に見ていきましょう。

f  # 顔の条件、1が可愛い、0はそれ以外
b  # おっぱいの条件、1が大きい、0はそれ以外
c  # 性格の条件、1がやさしい、0はそれ以外
h  # 髪の条件、1が黒い、0はそれ以外

def yamada(f,b,c,h)
  #どちらも満たす場合
   if f == 1 && b == 1
      true
  #①か②のどちらか一方、もしくは③か④のどちらか一方が満たす場合
   elsif (f == 1 || b == 1) || (c == 1 || h == 1)
      true
  #どの条件にも満たさない場合
   elsif !(f == 1 || b == 1) || (c == 1 || h == 1)
      true
   end
end

名付けて山田くんの彼女に相応しいかメソッド!
はい、くだらないこと言ってないで解説します。

まずどちらも満たす場合
Rubyでは&&でそれぞれの条件を満たすか判断します。

次にどちらか一方を満たす場合

でそれぞれの条件を満たすか判断します。

論理演算子は満たす場合はtrue、それ以外はfalseを返します。
また評価する優先順序があり、優先順位が高い順に評価されています。
よく使う評価式の優先順位は下記となります。
! >> () >> && >> || >> and,or
※and,orの論理演算子についてまた今度ということで

なので(f == 1 || b == 1) || (c == 1 || h == 1)の式は
()で囲まれたものから評価し
最後にそれぞれの条件を||で評価しています。

そしてどれも満たさない場合は
!を先頭につけて評価しています。

論理演算子が分かれば
while文やif文などで複雑なケースを記述することが可能です。
またプログラムもスッキリ書けます。
※複雑すぎて他者が見たとき分かりづらいコードは開発効率を悪くするので良く無いです。

論理演算子で条件分岐の表現に幅が広がりましたね!
これらをうまく使ってスマートなプログラム書きたいですね!!
if 私 == 天才になれるように頑張ります!!!

もっと詳しい内容は下記書籍を見てみてください!
amzn.to


それではまた!

【絵本】おやすみなさいおつきさま

32歳の一児のパパです。

今日も子供のためにお世話奮闘中。

 

今回は絵本のご紹介。

 

子供のお世話って大変なんですよ。

 

朝のオムツ替え、着替えに始まり。

子供との遊び方でも気を遣ったり、注意したり。

飯を食べる時は練習させながら掃除をし。

いかに注意を向け歯磨きさせてもらう状態にしたり。

色々大変なんです。

 

そんな大変な中、1日の終わりを締める

お世話、そう!寝かしつけ!

これもとても大変なんです。

 

あぁーやっとお世話から解放されると思っても

ココをクリアしないと1日のお世話から解放されません。

 

色々お話を聞いてると各家庭の寝かしつけの方法があり

ひたすら抱っこで寝させたり

お腹いっぱいにさせるためにミルクあげたり

家庭の数だけ様々な寝かしつけが繰り広げられています。

 

ウチでは絵本を読む習慣を取り入れてから

寝かしつけが以前に比べ楽になりました。

※友達の家の寝かしつけ聞いても、絵本は効果有りだと思う。

 

そんな寝かしつけの本、何を読んだら良いのと思いますよね。

いくつかオススメの寝かしつけの本あるんですが

今回はこちらの絵本をご紹介します。

その名も、おやすみなさいおつきさま

amzn.to

 

この絵本が寝かしつけになぜ有効か教えます。

※かなり偏見入ってます、そこんとこ注意。

 

それはズバリ!

内容がつまらない!!

 

まぁつまらないったら、つまらない。

次はどうなるんだろうという期待が持てない。

なので単調でつまらない。

でもこれが眠くなるんだと思うんですよ。

つまらない話、つまらない勉強、つまらない人など

つまらない時って眠くなりません?俺だけ?

つまらないということが寝かしつけで

こんなに役に立つと思いませんでした。

 

眠くさせる要素として

この絵本はつまらないだけじゃないんですね。

それはですね!

念仏のような文章!!

 

同じような文章がずーっと続くんです。

眠りの悟りが開けそうなほどに。

お経とか延々と同じ自慢話を聞かせてくる老害など

同じような内容を聞いてる時って眠くなりません?俺だけ?

同じことが続くと飽きて嫌になって眠くなるのかもしれません。

 

そして最後の眠くなる要素として

これぞトドメの一撃!

絵がだんだん暗くなっていく!!

 

徐々に絵が暗くなっていくんですよ。

明るいところと暗いところ

どっちが寝付きが良いかって言ったら

誰もが暗いところと考えますよね。

私なんて目を閉じるだけで視界が暗くなり眠くなりますよ。俺だけ?

暗いというのは眠る環境としてとても重要です。

 

まとめると

①内容がつまらない

②同じような文章のくりかえし

③絵が暗くなっていく

 

なんですか!この3連コンボ!

絵本の基本要素の全てが眠くなるって!最強か!?

 

書いてる私も眠くなってきました。。

寝かしつけに困っているお父さん、お母さん

是非、試してみてください!

※当たり前ですが効果が無い場合もあります。

 

amzn.to

 

英語教育をお考えの方に英語版もございます。

amzn.to

 

それではまた!

 

【Ruby】真偽判定メソッドについて

32歳で未経験からWEBエンジニアへ転職目指しています。

有益な情報あったら何でもください!(パソコンを閉じて)

 

今回はタイトルの通り真偽判定メソッドを

勉強がてらメモしていきます。

 

今、下記書籍を読み進めながら

Aidu online judgeを通してコーディングスキルを身につけています。

amzn.to


 

if文やwhile文の条件を記述する際に

真偽判定メソッドがとても役に立ちました。

ですのでrubyで書ける真偽判定メソッドをご紹介します!

是非、コーディングの際に役立ててください!

 

#空の文字列だった場合、trueを返す

"".empty?  # => true

"a".empty?  # => false

 

#対象のオブジェクトがnilだった場合、trueを返す。

nil.nil?  # => true

1.nil?  # => false

 

#文字列内に引数の文字列が含まれる場合、trueを返す。

#ちなみに配列オブジェクトに対しても要素で含まれる場合、trueを返す。

"aiueo".include?("ai"# => true

"aiueo".include?("ka"# => false

["a","b","c"].include?("a"# => true

["a","b","c"].include?("d"# => false

 

#数値が奇数の場合、trueを返す。

1.odd?  # => true

2.odd?  # => false

 

#数値が偶数の場合、trueを返す。

1.even?  # => false

2.even?  # => true

 

#上記の対象の前に!を付けると逆の結果を返します。

!"".empty?  # => false

!nil.nil?  # => false

!"aiueo".include?('a'# => false

!1.odd?  # => false

!1.even?  # => true

 

 

上記はrubyで標準文法です。

こんな真偽判定メソッドあったらいいなと考えたら

自分で作っちゃいましょう!

 

正しいもの、正しくないものが判別できるようになりましたね!

どんどん白黒つけちゃいましょう!!

でも人間とのコミュニケーションでは白黒つけ過ぎは

冷たいだなんて思われるんで特に女の子には辞めましょうね!!!

 

それではまた!

 

【Ruby】配列について質問したいです。

32歳の未経験からWEBエンジニアに転職しようとしています。
有益な情報があったら何でもください!(パソコンを閉じて)

今回は分からないことを書きます!(威張るなって)
teratailやstackflowに書けよって突っ込みはスルーします。

下記Aidu online judgeの問題にて
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_7_D&lang=ja

私は下記回答を提出しました。

n,m,l = gets.split(' ').map(&:to_i)

ary1 = []
ary2 = []

(n+m).times do |i|
    if i < n
        ary1 << gets.split(' ').map(&:to_i)
    else
        ary2 << gets.split(' ').map(&:to_i)
    end
end

result = Array.new(n,Array.new(l,0))

n.times do |i|
    l.times do |j|
        m.times do |k|
            result[i][j] += ary1[i][k] * ary2[k][j]
        end
    end
end

result.each do |r|
    puts r.join(' ')
end

出力結果が間違っていた。
各要素が同じ配列として出力されてしまってはねられてしまう。
ex)
5 40 25
5 40 25
5 40 25

なぜだ。。。。。

n,m,l = gets.split(' ').map(&:to_i)

ary1 = []
ary2 = []

(n+m).times do |i|
    if i < n
        ary1 << gets.split(' ').map(&:to_i)
    else
        ary2 << gets.split(' ').map(&:to_i)
    end
end

result = []

n.times do |i|
    result[i] = Array.new
    l.times do |j|
        result[i][j] = 0
        m.times do |k|
            result[i][j] += ary1[i][k] * ary2[k][j]
        end
    end
end

result.each do |r|
    puts r.join(' ')
end

上記だとパスする。。。
n行、l列の行列を初期値0で作成し
各要素を算出していくはずが。
なんでこんなに違うんだ。
Array.newを繰り返しの中でやるのか
繰り返しの前にn行、l列の行列を初期値0で作成するのは
ぜんぜん違うのか。。

分からない。。。
誰か教えてください!!

【Ruby】言語の特徴について

32歳で未経験からWEBエンジニアに転職に挑戦しています。
有益な情報があったら何でもください!
誰か助けてください!(パソコンを閉じて)

今回はRubyという言語についてざっくりと
勉強メモがてら書いていきたいと思います。

そもそもでプログラミング言語って
色々な種類があるのはご存知ですか?
手続き型だとか、オブジェクト指向だとか、関数型だとか。
ちなみにRubyオブジェクト指向で動的プログラミング言語です。

Rubyについては下記の記事を参考にさせて頂きましたところ
josys-navi.hiblead.co.jp

①まずはオブジェクト指向とは3つの概念で構成されています。
カプセル化
・継承
ポリモーフィズム
※ここら辺は別の記事で書いてみたいと思います。 

②全てはオブジェクトである。
文字列だとか数値だとか配列だとかハッシュなどの
色々なものに.classを付けてあげるとクラスが帰ってきます。
つまりクラスで設計されたオブジェクトであるんですね。
ちなみに基を辿っていくと全てのオブジェクトはBasicObjectに行き着きます。

以上の2つが特徴となっています。

また動的プログラミング言語とは
簡単に言うとコンパイルが必要ない言語のことです。
※ここらへんも別の記事で今度、書いていきたいと思います。

こうして参考にさせて頂いた記事を読んだりしていると
1つの疑問が浮かんできました。
それはRailsが登場していなかったら
Rubyはここまで使われてたのでしょうか。
この間、面接官のエンジニアの方が
スタートアップとかの初期段階でサービスを早く開発するのに
技術選定としてRails,Laravelが選ばれるが
サービスが成長していくとRubyなどだけでは物足りなくなると。
今後webアプリケーションエンジニアとして
キャリアを形成していく上で1つの言語のみを習得するのは
ビジネスを成長させるという観点で考えると良くないと感じました。
エンジニアの仕事はビジネスの課題を技術で解決することだからです。
もし転職したらココの見極めも出来るように頑張りたいですね。

こんなところでしょうか。
何か誰かに話せるようになった気がしますね!
引き出しが増えましたね!!
Rubyって宝石じゃないこと説明できますね!!

とまあ、ざっくりとまとめてみました。

それではまた!

【Ruby】四則演算の書き方

32歳で未経験からWEBエンジニアへ転職目指してます。

有益な情報あったら何でもください!

誰か助けてください!(パソコンを閉じて)

 

Railsポートフォリオを作成し転職活動進めています。
某何とかCAMPとは何とかACADEMYなどのスクールの類は通っていません。
ちなみに採用の人とカジュアル面談した際に
何とかCAMPの卒業生は全能感がある傾向がかなり高く
そしてWEBエンジニアに対しての理想が現場とかけ離れている人も多いと。
これは自分の戒めも含め、これから未経験でWEBエンジニアになりたいと思う人は
どんなに、どこで、どなたに凄いと言われようと天狗にならない
またプロフィール情報にもリゾート地で優雅なリモートワークをしたいだとかは
書かない方が良いとも思いました。
あくまで参考までに、企業によっては評価してくれる企業もあるかもしれません。
(某オンラインサロンで推奨されるDocker,CI/CDツール,AWSを使って開発)

 

実務未経験はデカイですね。

企業から中々興味を持って頂けません。

数社から興味を持っていただいたが(有名なアプリケーション企業)

あるフェーズに行くと落とされているという事実に気づく。

それはコーディングテスト!

 

Railsさんの便利さに乗っかりすぎてしまい

Rubyでプログラムを書く事を怠っていました。。。

なので落ちる、落ちる、落ちるぅううう。。。

落ちすぎて地上に戻れません。。。

 

早く日の光を浴びて、転職活動を成功に近づけたいと思い

下記の書籍とAidu Online Judgeで問題を解きながら

コーディングスキルを磨いております。


amzn.to



judge.u-aizu.ac.jp


 

今日はまずは基礎から、ということで

四則演算!

を勉強メモがてら書いていきたいと思います。

 

そもそもで四則演算とは


ja.wikipedia.org


wikipediaさん曰く

加算、減算、乗算、除算の4つの演算のことである。

もっと馴染みのある言い方で言うと

足し算、引き算、掛け算、割り算の4つだよと。

 

Rubyではどのように書くかと言うと

 1 + 1   # ==2

 4 - 1  # ==3

 1 * 4  # ==4

 10 / 2  # ==5

#浮動少数点数を割られる、または割る数に指定すると戻り値も浮動少数点数になる
 10.0 / 2.0  # ==5.0

#変数を使って計算することも可能
 a = 1
 b = 2
 a + b  # ==3

#ちなみにべき乗の計算は下記。2の3乗の場合。
  2 ** 3  # ==8

#蛇足ですが文字列同士を+で繋げた場合は連結される。
 c = "私は"
 d = ""
 c + d  # =="私は誰"

ざっくりとこんな感じで書く事ができます。

これで足し算とかの計算できるようになりましたね!
何でもプログラムを書ける気がしてきましたね!!
もしかして私だけですかね!!!

とまあ長い道のりの勉強です。
常に少しでも出来たという実感がとても必要です。
ほどほどに自らを評価しモチベーションを維持していきましょう。

それではまた!

数学力とは。。。

32歳で実務未経験でWEBエンジニア目指してます。

転職に関して有益な情報は何でもください。

お願いします。誰か助けてください!(パソコンを閉じて)

 

今日は最終面接に残った企業との面接へ。

エンジニアとして足りないスキルとして数学力を指摘されました。

 

数学力とは、を初めて聞きました。

簡単に言うと下記らしい。

複雑な問題を簡単に。簡単な問題を複雑に。

※後で調べたら下記記事が具体的でわかりやすかった。

www.naganomathblog.com

 

繰り返し処理や条件分岐の文章問題を間違えてしまって

必須能力が足りないから習得に長くかかると。。。

プログラミングは順次、繰り返し、条件分岐しか使わないから

それが出来ないってヤバすぎると。。。

上記ができると言語が変わってもアルゴリズムが組めると。。。まじ?

そしてフローチャートを理解していないからとも。。。

プログラミング問題は全問解けてたけど、そこは評価してくれないの。。。

 

とまあ、自分の足りない箇所が分かりました。

 

整理すると

①数学的思考力をつける。

 ▶︎上記のリンクを参考に考えるくせをつける。

  ▶︎記事を見ながら問題に取り組むことで体に染み込ませる。

 

フローチャートを使う。

 ▶︎頭の中だけで描くだけではなく、一度フローチャートで書き出す。

  ▶︎こちらも書き出してプログラムを実装することで体に染み込ませる。

 

まだまだ転職までの道は長そうですが

足りないトコロを習得して頑張ります!!