LoginSignup
0
2

[備忘録] 設計入門を20ページほど読んで早速アウトプットしてみた

Last updated at Posted at 2023-11-16

経緯

  • オブジェクト指向は知ってはいるものの、これまで関数ベース設計しかしてこなかったなと反省。
  • 来年の春から社会人になるわけだしそろそろクラスベース設計ができるようにならなきゃと思い良いコード-悪いコードで学ぶ設計入門を読み始めた。
  • まだ20ページくらいしか読んでいないがいきなりアウトプットしてみる!

やったこと

  • 直近で書いた短いコード(言語はGAS。文法はJSと同じ)を対象に関数ベースからクラスベースにして before afterを比較してみた。
  • ちなみにコードの内容はGASでスプレッドシートのメニューバーを作成するもの

before

function onOpen() {
    const ui = SpreadsheetApp.getUi()
    const menu = ui.createMenu('シート操作');
    const output_menu = ui.createMenu('シート出力');

    menu.addItem('選択中シートを一番左に移動する', 'leftEnd');
    menu.addItem('選択中シートを一番右に移動する', 'rightEnd');
    menu.addItem('yyyy年_mm月_一括シート削除', 'deleteSheetsByNamePattern');
    output_menu.addItem('シート出力', 'main');

    menu.addToUi();
    output_menu.addToUi();
}

after

class SpreadsheetUI {
    constructor() {
        this.ui = SpreadsheetApp.getUi();
    }

    createMenu(name) {
        return this.ui.createMenu(name);
    }

    addMenuToUi(menu) {
        menu.addToUi();
    }
}

function onOpen() {
    const spreadsheetUI = new SpreadsheetUI();

    const menu = spreadsheetUI.createMenu('シート操作');
    const outputMenu = spreadsheetUI.createMenu('出力');

    menu.addItem('選択中シートを一番左に移動する', 'leftEnd');
    menu.addItem('選択中シートを一番右に移動する', 'rightEnd');
    menu.addItem('yyyy年_mm月_一括シート削除', 'deleteSheetsByNamePattern');
    outputMenu.addItem('シート出力', 'main');

    spreadsheetUI.addMenuToUi(menu);
    spreadsheetUI.addMenuToUi(outputMenu);
}

メリット

  • クラスベースの方が操作は2つしかないことが明示できる
  • メソッドを追記していく形で拡張しやすそう

デメリット

  • クラスベース設計に慣れていない場合、初見での理解が遅くなりそう
  • シンプルに記述量増える

まとめ

  • 別のコードに対してもやってみて before after 比較する
  • 良いコード-悪いコードで学ぶ設計入門 読み進めていく
0
2
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
2