🐡
RubySilver学習まとめ2
引き続きRubySIlverの学習を進めています。苦手な範囲をまとめていきます!💪
Rexで出た問題
a = [1, 2, 3, 5, 8]
b = [1, 3, 6, 7, 8]
c = false || true ? true && false ? a | b : a & b : b ;
p c
Rubyの演算子の優先順位
演算子 | 意味 |
---|---|
&& |
両方 true のときだけ true |
|| |
どちらかが true なら true |
? : |
条件 ? 真のときの値 : 偽のときの値 |
| |
重複をなくして、全部まとめる。 |
& |
共通して含まれるものだけ残す。 |
かっこをつけて読みやすくすると
c = (false || true) ? ((true && false) ? (a | b) : (a & b)) : b
-
false || true
→ true -
true && false
→ false
||
(OR・論理和) の意味
「どちらかがOKならOK」
例:「傘を持ってる or 屋根がある」なら、雨でも濡れない
傘を持ってる | 屋根がある | 濡れない?(OR) |
---|---|---|
❌(false) | ❌(false) | ❌(false) |
❌(false) | ✅(true) | ✅(true) |
✅(true) | ❌(false) | ✅(true) |
✅(true) | ✅(true) | ✅(true) |
||
は、 1つでも true なら、全体は true 。
false || true
は…
つまり、-
false
→ 傘はない -
true
→ 屋根がある
⇒ 少なくとも1つが true → 濡れない → true
&&
(AND・論理積) の意味
「両方そろって初めてOK」
例:「財布を持ってる and 現金が入ってる」なら買い物できる
財布がある | お金がある | 買い物できる?(AND) |
---|---|---|
❌(false) | ❌(false) | ❌(false) |
❌(false) | ✅(true) | ❌(false) |
✅(true) | ❌(false) | ❌(false) |
✅(true) | ✅(true) | ✅(true) |
両方が true のときだけ、結果も true になる。
true && false
は…
つまり、 -
true
→ 財布はある -
false
→ お金がない
⇒ 両方そろっていない → 買い物できない → false
問題に戻ると…
c = true ? false ? a | b : a & b : b
これもかっこをつけると…
c = true ? (false ? (a | b) : (a & b)) : b
- 一番外側の
true ? ... : b
を見ます
→ true なので、左側の(false ? ... : ...)
を使います - 次に
false ? (a | b) : (a & b)
を見ます
→ false なので、右側の(a & b)
を使います
つまり…c = a & b
a = [1, 2, 3, 5, 8]
b = [1, 3, 6, 7, 8]
a & b # => [1, 3, 8]
[1, 3, 8]
✅ 答え:ファイルの読み書き
モード | 説明 |
---|---|
'r' |
読み込み専用。ファイルが存在しないとエラー。書き込み不可。 |
'r+' |
読み書き可能。既存のファイルの内容を保持したまま、読み書きできる。 |
'w' |
書き込み専用。ファイルが存在すると中身が消える。 |
'w+' |
読み書き可能。ただしファイルを 最初に空にする(上書き)。 |
'a+' |
読み書き可能。追記モード(内容の末尾に追加される)。 |
1問目
open('textfile.txt', XXXX) do |f|
data = f.read.upcase
f.rewind
f.puts data
end
実行前の textfile.txt 内容
recode 1
recode 2
recode 3
実行後の textfile.txt 内容
RECODE 1
RECODE 2
RECODE 3
答え
正解: 'r+'
読み書き両用。内容を消さずに開いて、読み出したあと上書きも可能。
処理の流れ
- ファイルをモードXXXXで開く
- 内容をすべて読み込んで大文字化
-
f.rewind
でファイルの先頭に戻る -
f.puts data
で新しい内容を書き込む
2問目
File.open('testfile.txt', XXXX) do |f|
f.write("recode 1\n")
f.seek(0, IO::SEEK_SET)
f.write("recode 2\n")
end
実行後の textfile.txt 内容
recode 1
recode 2
答え
正解:'w+'
-
write → OK
(書き込み可能) -
seek(0, IO::SEEK_SET)
→ OK(読み書き両方可能で、先頭に戻れる) - 既存内容は削除される → 指定の出力になる
非破壊的・破壊的
str = "Liberty Fish \r\n"
str.strip # "Liberty Fish"
p str # "Liberty Fish \r\n"
-
strip
は非破壊的メソッド -
str.strip
は、strの両端の空白や改行を「削除した新しい文字列」を返すだけ。(削除したらこうなるというのを出力) - 元の変数strは一切変更されない
Discussion