Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@tukapai

超初歩的なRubyのスクリプトで残業代を計算する。

More than 1 year has passed since last update.

元ネタはこちら
Rubyでユーザのキーボード入力を対話的に受け取るRubyスクリプト

最近、仕事する時間が長くなってきて、コンソール上でこっそり残業代を計算するスクリプトが欲しいなーと思ったのでRuby超初心者が書いてみました。

やりたかったこと

  • スマホを取り出して電卓アプリを起動するものもはや面倒なのでなるべくキーボードから手を離さずになにか計算したい。
  • RubyのMatzさんの講演会を聞いたのでとりあえずなんでもいいからRubyでなにか書きたかった。
  • まあ、とりあえずやることが大事というモチベーションを維持したい。

実行環境

OS: MacOS
Ruby: ruby 2.3.7

特にOSによる環境差異はないと思うのでRuby入れれば動くはず

ちょっと時間がかかったこと

問題点

gets.chompで対話的に入力値を取れるかな思ったけどString型になってしまうことを理解していなったので計算実行時こんなエラーが起きた

How_much_money.rb:51:in `calc_money': undefined local variable or method `"\u201D\u3042\u306A\u305F\u306E\u6B8B\u696D\u4EE3\u306F"' for #<HowMuchMoneyClass:0x00007fc50a8c4e58> (NameError)
        from How_much_money.rb:58:in `<main>'
MacBook-Pro:Ruby pcuser$ ruby How_much_money.rb
How_much_money.rb:51: syntax error, unexpected tIDENTIFIER, expecting keyword_end

解決策

計算のためには整数でないといけないのでInt型に変換するようにgets.to_iで数値を受け取って上げればおK

スクリプト本体

コンソールで使う場合は以下のように実行

$ ruby How_much_money.rb

今のこんな感じで出力されます。(要改良)

----------------------------
自分の残業代を計算しますか?
計算する場合は yes、キャンセルする場合は no と入力して下さい.
yes
  計算を実行します.
----------------------------
基準とする時給を入力してください
入力例:)1250
900
----------------------------
仕事をした時間を入力してください。
入力例:)80
40
あなたの残業代は 36000 円です

今の所こっそり感はゼロですが、まあ気にしない

特にひねりはないですがソースはこんな感じ

ruby How_much_money.rb

#!/bin/env ruby

## ----------------------------
# ユーザからのキーボードの入力を受け取り、
# yes と入力されたらスクリプトを実行する、no と入力されたらスクリプトを終了します.
## ----------------------------

class HowMuchMoneyClass

  def initialize

    puts <<-EOT
----------------------------
自分の残業代を計算しますか?
計算する場合は yes、キャンセルする場合は no と入力して下さい.
    EOT

  end

  def get_keyboard_input_yes_no

     case gets.chomp
       when "yes", "YES", "y"
         puts "  計算を実行します."
       when "no", "NO", "n"
         puts "  スクリプトを終了します."
         exit 1
       else
         puts "  yes または no を入力して下さい."
         confirm = HowMuchMoneyClass.new
         confirm.get_keyboard_input_yes_no
     end
   end

   def calc_money
        # 計算する場所
        puts <<-EOT
----------------------------
基準とする時給を入力してください
入力例:)1250
   EOT
        base_monoey = gets.to_i
        puts <<-EOT
----------------------------
仕事をした時間を入力してください。
入力例:)80
   EOT
        money_time = gets.to_i
       #計算結果を返す
       result = base_monoey * money_time
       puts "あなたの残業代は #{result} 円です"
   end
end


confirm = HowMuchMoneyClass.new()
confirm.get_keyboard_input_yes_no
confirm.calc_money

感想

コンフィグファイル的なやつを入れれば、コンソールに金額とかの情報を載せずともできそうなので今度改良してみようかなと思いました。

シェルとかPythonとか自分の好きな言語でこういうツールを作ってみるのもいいかもしれないですね。

他の人みたいにエクセレントな設計とかできないので思いついたものから地味にやっていくのがいいかな

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
tukapai
何故か仏教を学んだプログラマー 通常はインフラ系ですが、何でもやるマン 主にRubyが最近好き💕
vsn
IT、メカトロニクス・エレクトロニクス、バイオ・ケミストリー分野における無期雇用型派遣事業を行っています。技術力とコンサル力でお客さま事業に革新をもたらすべく、約4,000名のエンジニアが活躍中です。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?