Skip to content

Instantly share code, notes, and snippets.

View Peranikov's full-sized avatar
🙃
I'm Japanese

Peranikov Peranikov

🙃
I'm Japanese
View GitHub Profile
@Peranikov
Peranikov / kawasakirb_56_5-7-3.rb
Created January 24, 2018 11:01
5-7-3 ファイルの操作
# 属性や状態の取得
fname = '/etc/hosts' # Windowsでは 'C:¥Windows¥System32¥drivers¥etc¥hosts'
File.atime(fname) # 最終アクセス日時 => 2018-01-24 19:28:45 +0900
irb(main):004:0> File.ctime(fname) # 最後に状態を変更した日時 => 2017-12-09 12:23:36 +0900
irb(main):005:0> File.mtime(fname) # 最終更新日時 => 2017-12-04 19:03:18 +0900
# ファイルの存在
File.exists?(fname) # => true
@Peranikov
Peranikov / kawasakirb_55_5-7-3.rb
Created December 20, 2017 11:05
5–7-2 ファイルの操作
# ファイル名の変更
File.renaem 'src', 'dest'
# ファイルの移動
File.rename 'src', 'dir/dest'
# ファイルの削除
File.unlink 'fname'
# シンボリックリンク
@Peranikov
Peranikov / kawasakirb_54_5-7-2.rb
Created November 22, 2017 11:06
5–7-2 Fileオブジェクトの操作
# ファイルのロック
File.open 'counter', File::RDWR | File::CREAT do |f|
f.flock File::LOCK_EX
count = f.read.to_i
f.rewind
f.write count.succ
end
# ファイルに関する情報の取得
File.open 'counter' do |f|
@Peranikov
Peranikov / kawasakirb_53_5-7.rb
Last active October 25, 2017 11:20
5–7 IO・File
# ファイルを読み込む
file = File.open('fname.txt')
puts file.read
file.close
# ブロックで記述するとすっきり書ける
File.open 'fname.txt' do |file|
puts file.read
end
Time.now # => 2017-09-27 19:59:10 +0900
Time.new # => 2017-09-27 19:59:10 +0900
# タイムゾーンを得る
Time.now.zone # => "JST"
# UTC時間を得る
Time.now.getutc # => 2017-09-27 11:00:01 UTC
# タイムゾーンをUTCに変更する
@Peranikov
Peranikov / kawasakirb_51_5-5-5.rb
Created September 27, 2017 10:58
5-5-4 Enumerator::Lazy
# Ruby2.0からEnumerator::Lazyが追加された
(0..Float::INFINITY).map { |n| n.succ }.select {|n| n.odd?}.take(3) # 返ってこない
# lazyによって必要な分だけ計算し結果を得ることができる
odd_numbers = (0..Float::INFINITY).lazy.map { |n| n.succ }.select {|n| n.odd?}.take(3)
odd_numbers.force # => [1, 3, 5]
# lazyを用いた場合は要素を繰り返す度にmapとselectが実行されていることがわかる
(0..Float::INFINITY).lazy.map { |n|
puts "map: #{n}"
@Peranikov
Peranikov / kiyoi.js
Created August 16, 2017 03:11
清く正しいJS
setInterval(function() {
img = document.createElement("img");
img.src = "https://qiita-cloud.s3-ap-northeast-1.amazonaws.com/emoji/innocent.png";
document.body.appendChild(img);
document.body.insertBefore(img, document.body.firstChild);
}, 500);
@Peranikov
Peranikov / kawasakirb_50_5-5-4.rb
Created July 26, 2017 11:23
5-5-4 Enumerator
# 様々なクラスがEnumeratorを返すメソッドを持っている
[].each
{}.each
(1..10).each
''.each_char
10.times
# loop
#to_enum/enum_forメソッドでも得られる
[1,2,3].to_enum
@Peranikov
Peranikov / kawasakirb_49_5-5-3.rb
Last active June 28, 2017 11:28
5-5-3 Hash マージ
# マージ
a = { one: 'A', two: nil }
b = { two: 'B', three: 'C' }
a.merge(b) # => {:one=>"A", :two=>"B", :three=>"C"}
# mergeは疑似キーワード引数にデフォルト値をもたせたいときに便利
def keywords(hash = {})
defaults = {alice: 'ありす', bob: 'ぼぶ'} # デフォルト値のハッシュ
hash = defaults.merge(hash)
hash
# Hash
array = [1, 2]
# Hashのキーには通常、Object#hashの値が使われる
# ミュータブルなオブジェクトはHashのキーに向かない
array.hash # => -2511718100518778594
array.reverse! # => [2, 1]
array.hash # => -206156502938470765
# Stringもミュータブルだが、利便性のために例外扱いとなっている