質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

1回答

567閲覧

【Ruby】ファイル分けの目安について

kodomo1209

総合スコア2

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2022/11/10 00:40

編集2022/11/11 01:53

前提

Rubyで自販機のコードを一つのファイルで書いたのですが、複数のファイルに分けれると聞きました。
最終的にこういう感じに分けたいのですが、
下のコードは細かく分けるか、大まかに分けるかどっちがいいと思いますか?

文章力なくてすみません。

(11/11追記)現在関数化、クラス化を行なっています。

該当のソースコード

Ruby

1#お金の設定 2man = 0 3gosen = 0 4sen = 0 5gohya = 0 6hya = 0 7goju = 0 8ju = 0 9 10#商品の準備 11kora = 10 12mon = 10 13mi = 10 14tya = 10 15sai = 10 16miru = 10 17ko = 10 18kogyu = 10 19remo = 10 20tan = 10 21ode = 10 22osi = 10 23 24#配列に情報を入れる 25en =[0,110,210,100,120,140,150,160,160,200,10000,240] 26hyo = ["","1 コーラ","2 モンエナ","3 水","4 お茶","5 サイダー","6 ミルクティー","7 コーヒー","8 コーヒー牛乳","9 レモンティー","10 炭酸水","11 お汁粉"] 27 28#商品の表示 29puts " 商品" 30puts " " 31puts "炭酸水   10000円" 32puts "コーラ   110円" 33puts "モンエナ   210円" 34puts "サイダー  140円" 35puts "水      100円" 36puts "お茶     120円" 37puts "ミルクティー 150円" 38puts "レモンティー 200円" 39puts "コーヒー   160円" 40puts "コーヒー牛乳 160円" 41puts "お汁粉 240円" 42 43sleep 1 44 45#お金を入れる 46puts "" 47puts "" 48puts "お金を入れてください" 49puts "万札" 50man = gets.to_i 51puts "5000円札" 52gosen = gets.to_i 53puts "1000円札" 54sen = gets.to_i 55puts "500円玉" 56gohya = gets.to_i 57puts "100円玉" 58hya = gets.to_i 59puts "50円玉" 60goju = gets.to_i 61puts "10円玉" 62ju = gets.to_i 63 64#金額計算 65man = man * 10000 66gosen = gosen * 5000 67sen = sen * 1000 68gohya = gohya * 500 69hya = hya * 100 70goju = goju * 50 71ju = ju * 10 72 73#入金の確認 74gokei = man + gosen + sen + gohya + hya + goju + ju 75puts "" 76puts "入金された金額 #{gokei}円" 77 78#購入できる商品を表示 79puts "" 80puts "買える商品は" 81n = 1 82if gokei > 99 then 83 while n < 12 do 84 if en[n] <= gokei then 85 puts "#{hyo[n]} #{en[n]}円" 86 sleep 0.2 87 end 88 n = n + 1 89 end 90else 91 puts "何もない" 92end 93puts "" 94puts "です" 95 96sleep 1 97 98#金額が足りない場合 99if gokei < 100 then 100 exit 101end 102 103#購入の手続き(購入できたら商品名が表示される) 104c = 1 105while c == 1 do 106 puts "" 107 puts "買いたい商品の番号を入力してください" 108 k = gets.to_i 109 y = 0 110 if k == 1 and gokei >= en[k] then 111 if kora != 0 then 112 kora = kora - 1 113 gokei = gokei - en[k] 114 puts "コーラ" 115 puts "残金#{gokei}円" 116 else 117 puts "売り切れです" 118 y = 1 119 end 120 z = 1 121 elsif k == 2 and gokei >= en[k] then 122 if mon != 0 then 123 mon = mon - 1 124 gokei = gokei - en[k] 125 puts "モンエナ" 126 puts "残金#{gokei}円" 127 else 128 puts "売り切れです" 129 y = 1 130 end 131 z = 1 132 elsif k == 3 and gokei >= en[k] then 133 if mi != 0 then 134 mi = mi - 1 135 gokei = gokei - en[k] 136 puts "水" 137 puts "残金#{gokei}円" 138 else 139 puts "売り切れです" 140 y = 1 141 end 142 z = 1 143 elsif k == 4 and gokei >= en[k] then 144 if tya != 0 then 145 tya = tya - 1 146 gokei = gokei - en[k] 147 puts "お茶" 148 puts "残金#{gokei}円" 149 else 150 puts "売り切れです" 151 y = 1 152 end 153 z = 1 154 elsif k == 5 and gokei >= en[k] then 155 if sai != 0 then 156 sai = sai - 1 157 gokei = gokei - en[k] 158 puts "サイダー" 159 puts "残金#{gokei}円" 160 else 161 puts "売り切れです" 162 y = 1 163 end 164 z = 1 165 elsif k == 6 and gokei >= en[k] then 166 if miru != 0 then 167 miru = miru - 1 168 gokei = gokei - en[k] 169 puts "ミルクティー" 170 puts "残金#{gokei}円" 171 else 172 puts "売り切れです" 173 y = 1 174 end 175 z = 1 176 elsif k == 7 and gokei >= en[k] then 177 if ko != 0 then 178 ko = ko - 1 179 gokei = gokei - en[k] 180 puts "コーヒー" 181 puts "残金#{gokei}円" 182 else 183 puts "売り切れです" 184 y = 1 185 end 186 z = 1 187 elsif k == 8 and gokei >= en[k] then 188 if kogyu != 0 then 189 kogyu = kogyu - 1 190 gokei = gokei - en[k] 191 puts "コーヒー牛乳" 192 puts "残金#{gokei}円" 193 else 194 puts "売り切れです" 195 y = 1 196 end 197 z = 1 198 elsif k == 9 and gokei >= en[k] then 199 if remo != 0 then 200 remo = remo - 1 201 gokei = gokei - en[k] 202 puts "レモンティー" 203 puts "残金#{gokei}円" 204 else 205 puts "売り切れです" 206 y = 1 207 end 208 z = 1 209 elsif k == 10 and gokei >= en[k] then 210 if tan != 0 then 211 tan = tan - 1 212 gokei = gokei - en[k] 213 puts "炭酸水" 214 puts "残金#{gokei}円" 215 else 216 puts "売り切れです" 217 y = 1 218 end 219 z = 1 220 elsif k == 11 and gokei >= en[k] then 221 if osi != 0 then 222 osi = osi - 1 223 gokei = gokei - en[k] 224 puts "お汁粉" 225 puts "残金#{gokei}円" 226 else 227 puts "売り切れです" 228 y = 1 229 end 230 z = 1 231 else 232 puts "その番号はありません" 233 z = 3 234 end 235 sleep 0.5 236 if y == 0 then 237 if z != 3 then 238 ru = sprintf("%.4d", rand(10000)) 239 #ru = 1111 240 if ru == 0000 or ru == 1111 or ru == 2222 or ru == 3333 or ru == 4444 or ru == 5555 or ru == 6666 or ru == 7777 or ru == 8888 or ru == 9999 then 241 puts "ルーレット:#{ru} あたり" 242 else 243 puts "ルーレット:#{ru} はずれ" 244 end 245 if ru == 0000 or ru == 1111 or ru == 2222 or ru == 3333 or ru == 4444 or ru == 5555 or ru == 6666 or ru == 7777 or ru == 8888 or ru == 9999 then 246 x = 5 247 while x == 5 do 248 puts "" 249 puts "ゾロ目が出ました" 250 puts"おめでとうございます" 251 sleep 0.5 252 puts "お好きな飲み物を選んでください" 253 sleep 0.5 254 puts "" 255 puts "欲しい商品の番号を入力してください" 256 k = gets.to_i 257 if k == 1 then 258 if kora != 0 then 259 kora = kora - 1 260 puts "コーラ" 261 else 262 puts "売り切れです" 263 end 264 x = 2 265 elsif k == 2 then 266 if mon != 0 then 267 mon = mon - 1 268 puts "モンエナ" 269 else 270 puts "売り切れです" 271 end 272 x = 2 273 elsif k == 3 then 274 if mi != 0 then 275 mi = mi - 1 276 puts "水" 277 else 278 puts "売り切れです" 279 end 280 x = 2 281 elsif k == 4 then 282 if tya != 0 then 283 tya = tya - 1 284 puts "お茶" 285 else 286 puts "売り切れです" 287 end 288 x = 2 289 elsif k == 5 then 290 if sai != 0 then 291 sai = sai - 1 292 puts "サイダー" 293 else 294 puts "売り切れです" 295 end 296 x = 2 297 elsif k == 6 then 298 if miru != 0 then 299 miru = miru - 1 300 puts "ミルクティー" 301 else 302 puts "売り切れです" 303 end 304 x = 2 305 elsif k == 7 then 306 if ko != 0 then 307 ko = ko - 1 308 puts "コーヒー" 309 else 310 puts "売り切れです" 311 end 312 x = 2 313 elsif k == 8 then 314 if kogyu != 0 then 315 kogyu = kogyu - 1 316 puts "コーヒー牛乳" 317 else 318 puts "売り切れです" 319 end 320 x = 2 321 elsif k == 9 then 322 if remo != 0 then 323 remo = remo - 1 324 puts "レモンティー" 325 else 326 puts "売り切れです" 327 end 328 x = 2 329 elsif k == 10 then 330 if tan != 0 then 331 tan = tan - 1 332 puts "炭酸水" 333 else 334 puts "売り切れです" 335 end 336 x = 2 337 elsif k == 11 then 338 if osi != 0 then 339 osi = osi - 1 340 puts "お汁粉" 341 else 342 puts "売り切れです" 343 end 344 x = 2 345 else 346 puts "その番号はありません" 347 x = 5 348 end 349 end 350 end 351 end 352 end 353 sleep 0.5 354 v = 1 355 while v == 1 do 356 if 100 > gokei then 357 c = 2 358 else 359 puts "" 360 puts "続けて購入しますか?" 361 sleep 0.5 362 puts " 1はい 2いいえ" 363 c = gets.to_i 364 end 365 if c == 1 then 366 break 367 elsif c == 2 then 368 break 369 else 370 puts "選択肢を選んでください" 371 end 372 end 373end 374 375#お釣りの計算 376goke = gokei 377man = gokei / 10000 378gokei = gokei % 10000 379gosen = gokei / 5000 380gokei = gokei % 5000 381sen = gokei / 1000 382gokei = gokei % 1000 383gohya = gokei / 500 384gokei = gokei % 500 385hya = gokei / 100 386gokei = gokei % 100 387goju = gokei / 50 388gokei = gokei % 50 389ju = gokei / 10 390 391#お釣りの払い戻し 392puts "" 393puts "お釣りは" 394puts "" 395sleep 0.2 396puts "万札が #{man}枚" 397puts "" 398sleep 0.2 399puts "五千円札が #{gosen}枚" 400puts "" 401sleep 0.2 402puts "千円札が #{sen}枚" 403puts "" 404sleep 0.2 405puts "500円玉が #{gohya}枚" 406puts "" 407sleep 0.2 408puts "100円玉が #{hya}枚" 409puts "" 410sleep 0.2 411puts "50円玉が #{goju}枚" 412puts "" 413sleep 0.2 414puts "10円玉が #{ju}枚" 415puts "" 416sleep 0.2 417puts "合計#{goke}円です" 418puts "" 419sleep 0.5 420puts "ご利用ありがとうございました"

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2022/11/10 13:41

ファイルに分割するよりも先に『関数化』あるいは『クラス化』した方がいいかもしれません。 なんかざっと見た感じ、同じような処理がとろどころある気が…。
退会済みユーザー

退会済みユーザー

2022/11/11 01:46

defのことですかね?
kodomo1209

2022/11/11 01:50

なるほどです。やってみますね、
guest

回答1

0

最終的にこういう感じに分けたいのですが、

そこにあるように、Rubyではクラス(あるいはモジュール)単位でファイルを切ります。

「細かく分けるか、大まかに分けるか」なんてことは先に考えることではなく、意味のある単位をクラスとして抽出することを考えてください。

投稿2022/11/10 00:54

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kodomo1209

2022/11/10 02:08

例えば、お金、商品、お釣りの計算などですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問