Skip to content
yowasou edited this page Aug 13, 2023 · 2 revisions

Hamamatsu.rb 103

  • 6人?

自己紹介

  • 新人1人
  • RubyやったことないけどSwift経験のある人
  • アプリ公開してます

KPTふりかえり

  • QRコードが有効活用された
  • JSレビューは?・・・うまくいった
  • モニター二台使ったらはかどった
  • 次は一人10分で試す

雑談

  • みんな常連・・・
  • ちょっと人少なめかも?
  • プロゲート使えるなら使ったほうがいいかも
  • Railsやりたい?・・・Railsチュートリアルとか
  • チェリー本とか
  • SlackのRUBY-JPに参加してね
  • Hamamatsu.rbのチャンネルにも

モブプログラミング - テーマ決め

  • Left-padを実装する
  • 文字を左埋めする。1⇒0001
  • 2分でできるか?・・・

モブプログラミング

  • 普段使いの言語が違う人はRubyルールで書けなかったりする(アンダースコアとか)

  • 詰める必要がなかったらどうする?

  • ⇒何もしないのが正解か

  • ⇒何もしないように実装

  • 詰める文字に複数文字渡ってきたらどうする?

  • ⇒エラーとするように実装

  • ⇒言語仕様による

  • エラーはassert_raisesで実装

  • 1行IFより後置IFのほうがそれっぽい

  • rpadを実装したらlpadの実装は簡単だった

  • 時間内に実装できたのでリファクタ

  • 結果は以下

  • string_pad.rb

module StringPad
  def lpad!(max_length, padding)
    replace(pad_impl(max_length, padding) + self)
  end

  def lpad(max_length, padding)
    str = self.dup
    str.lpad!(max_length, padding)
    str
  end

  def rpad!(max_length, padding)
    replace(self + pad_impl(max_length, padding))
  end

  def rpad(max_length, padding)
    str = self.dup
    str.rpad!(max_length, padding)
    str
  end

  def pad_impl(max_length, padding)
    raise ArgumentError if padding.length != 1

    padding_length = max_length - length
    return '' if padding_length.negative?
    padding * padding_length
  end
end
  • string_pad_test.rb
require_relative 'coverage'
require_relative 'string_pad'
require 'minitest/autorun'

class String
  include StringPad
end

class TestStringPad < MiniTest::Test

  def test_lpad
    assert_equal '0001', '1'.lpad(4, '0')
    assert_equal '00001', '1'.lpad(5, '0')
    assert_equal '  1', '1'.lpad(3,' ')
  end

  def test_lpad_selfの長さがmax_lengthより少ない場合
    assert_equal '0001', '0001'.lpad(3, '0')
  end

  def test_lpad_paddingに1文字以外の文字列を渡したらエラー
    assert_raises ArgumentError do
      '0001'.lpad(5,'00')
    end
  end

  def test_lpad_で自分自身が破壊されないこと
    str = '1'
    str.lpad(4, '0')
    assert_equal '1', str
  end

  def test_lpad!
    str = '1'
    str.lpad!(4, '0')
    assert_equal '0001', str
  end

  def test_rpad
    assert_equal '1000', '1'.rpad(4, '0')
    assert_equal '10000', '1'.rpad(5, '0')
    assert_equal '1  ', '1'.rpad(3,' ')
  end

  def test_rpad_selfの長さがmax_lengthより少ない場合
    assert_equal '1000', '1000'.rpad(3, '0')
  end

  def test_rpad_paddingに1文字以外の文字列を渡したらエラー
    assert_raises ArgumentError do
      '0001'.rpad(5,'00')
    end
  end

  def test_rpad_で自分自身が破壊されないこと
    str = '1'
    str.rpad(4, '0')
    assert_equal '1', str
  end

  def test_rpad!
    str = '1'
    str.rpad!(4, '0')
    assert_equal '1000', str
  end
end

これが今回のセッション https://cyber-dojo.org/kata/edit/YsC7BJ

告知

  • 9/14 Android

  • 9/15 Unityゲームプログラミング

  • 9/19 JAWS-UG

  • 9/21 Githubノウハウ共有

  • 9/21 PyCON JP

  • 9/26 kintone cafe

  • 9/28 浜松golangもくもく会

  • 11/9にhamamatsu.js

  • 12月に合同勉強会?

  • 高齢化の一過を辿っている

  • トライアルオフィスは勉強会じゃなくて企業間向けだから使いにくいかも

KPT

KEEP

  • お菓子 ★4
  • テーマがいじり甲斐があった ★2
  • 全員コード書いた ★2
  • 持ち時間10分良かった気がする ★1
  • おおよそ完成した
  • https://cyber-dojo.org/kata/edit/YsC7BJ ★1

PROBLEM

TRY

  • Doorkeeperのページの地図を直す
  • なんかLTネタを作る ★5
  • QRコード機能した ★1
  • ruby-jpに参加
  • みんなruby.jpのSlackチャンネル入ろうhttps://ruby-jp.github.io/ ★1
  • 告知頑張る ★1

次回

  • 10/9(水) #104
  • 同じ場所で
  • モブプロ
Clone this wiki locally