LoginSignup
0
0

More than 3 years have passed since last update.

更新メソッド(setter)や関数を定義しよう!

Posted at

なぜsetter(更新関数)を定義するの?

やるメリット

  • 同じ意味をもつ更新がどこで行われているかわかる(なぜ関数を定義するのか)
  • 行われうる更新を宣言することで逆に行われない更新を自明にできる

やらないデメリット

  • 同じ更新が他の箇所でも書かれていてコード重複がおきている可能性がある
  • 更新関数がないということは別の関数が更新関数を実現しているはずなのでその別の関数が太ってしまう
  • どこでどんな更新が行われているのかわからなくなる

Object.assign(スプレッドシンタックス)はだめなの!?

  • あるクラス(型)の中でプライベートに使うのはいいけど、クラス(型)の利用者が使うのやめたほうがいいんじゃないかな!
  • ショートハンドはセッターとは違うぞ!

setterがない場合


const user = {id: 100, firstName: 'yamada', lastName: 'hanako' }

function onClickNameChangeSubmit(event) {
    const firstName = event.target.value

    let updatedUser = JSON.stringfy(JSON.parse(user))
    updatedUser.firstName = firstName

    save(updatedUser)

    alert("苗字が変更されました!")
}

object.assign(スプレッドシンタックス)を使ったら


const user = {id: 100, firstName: 'yamada', lastName: 'hanako' }

function onClickNameChangeSubmit(event) {
    const firstName = event.target.value

    // ぱっと見わかりやすくなった風だがこれをみてユーザの苗字を変えるとは読めないぞ...
    const updatedUser = {...user, firstName}

    save(updatedUser)

    alert("苗字が変更されました!")
}

setterを定義したら

  • setUserFirstNameはonClickNameChangeSubmit以外の関数でも使えそうだね!

const user = {id: 100, firstName: 'yamada', lastName: 'hanako' }

function setUserFirstName(user, firstName) {
    return {...user, firstName}
}

function onClickNameChangeSubmit(event) {
    const firstName = event.target.value
    // 上から下へこの関数を読んだときにここでは苗字が更新されることが一目でわかる
    const updatedUser = setUserFirstName(user, firstName)
    save(updatedUser)

    alert("苗字が変更されました!")
}

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0