Kanade Logoカナデ Kanade

2. アクセス修飾子 (秘密と公開)

他人が自分のオブジェクトの中身をむやみに覗き見できないように防ぎましょう!

自分が作ったオブジェクトの属性や機能を、他人が外からむやみに触れないようにしたい時はどうしましょうか? Kanadeは動詞の語尾を少し変えるだけで、とても簡単に秘密を守ることができるんですよ。

  • 公開 (Public): 広く使われる時は にしよう / 作ろう
  • 秘密 (Private): 自分だけでこっそり使う時は 隠そう を使います(例: 隠そう / 作って隠そう)。外から呼ぶとエラーになりますね!
  • 保護 (Protected): 自分の子供にだけ教える時は 譲ろう を使います(例: 決めて譲ろう / 作って譲ろう)。
【金庫】を設計しよう:
    (参考)このパスワードは金庫の外からは絶対に見られません!
    『パスワード』を【数字】の1234に隠そう

    〈パスワード確認〉を作って隠そう(【数字】の『入力値』):
        もし(『私』の『パスワード』と『入力値』が同じだ)なら:
            真を返そう
        偽を返そう

    〈金庫を開ける〉を作ろう(【数字】の『入力値』):
        もし(『私』の〈パスワード確認〉(『入力値』)が真と同じだ)なら:
            「ガチャッ!金庫が開きました。」を出力しよう
        それ以外なら:
            「警告!パスワードが間違っています。」を出力しよう

『私の金庫』を【金庫】の新しい【金庫】()にしよう
『私の金庫』の〈金庫を開ける〉(9999)を実行しよう
『私の金庫』の〈金庫を開ける〉(1234)を実行しよう

こうすれば、外から誤って他人のパスワードを変えたり盗み見たりする不祥事をしっかり防ぐことができるんですよ。


禁じられた一線を越えるとどうなるでしょうか?

もし外から無理やり隠された(秘密の)機能を呼ぼうとすると、Kanadeが恐ろしいエラーを出して防いでくれます。下のコードを打って直接エラーを見てみましょうか?

【秘密のノート】を設計しよう:
    『私の日記』を【文字列】の「今日は寝坊した」に隠そう

    〈日記を読む〉を作って隠そう():
        『私』の『私の日記』を出力しよう

『私のノート』を【秘密のノート】の新しい【秘密のノート】()にしよう

(参考)あっ!外からこっそり日記を読もうとするとエラーが発生します!
『私のノート』の〈日記を読む〉()を実行しよう

このコードを実行すると、“AccessViolationError: ‘日記を読む’ 機能は内部専用(private)なので外部から呼ぶことはできません。” という赤いエラーメッセージが出て実行が中断されますよ!


プロパティアクセサ (Getter/Setter) で安全に値を扱う

秘密に隠しておいた変数を外から安全に読み書きできるように開いてあげたいなら、プロパティアクセサを使ってみてください! 取得する時:決める時:ブロックを使えば、値を取得したり変更したりする時に自分が望むチェックを先にできるんですよ。

【財布】を設計しよう:
    『_お金』を【数字】の0に隠そう
    
    『お金』を【数字】にしよう:
        取得する時:
            『私』の『_お金』を返そう
        決める時(『金額』):
            もし(『金額』が0より小さい)なら:
                「お金はマイナスになれません!」を出力しよう
            それ以外なら:
                『私』の『_お金』を『金額』にしよう

『私の財布』を【財布】の新しい【財布】()にしよう
『私の財布』の『お金』を1000にしよう
『私の財布』の『お金』を-500にしよう
枠「現在私の財布には{『私の財布』の『お金』}円あります。」を出力しよう

こうすれば、間違った値が入ってくるのを防ぎつつ、外からは変数のようにお手軽に使えるんですよ!

プレイグラウンド (Playground)

ターミナル
コードを書いて「実行」ボタンを押してください。