【VBA】FizzBuzzをクラスを使って書いてみる【GAS】
最近GAS(Google Apps Script)の勉強を始めたので、
某所のお題であったFizzBuzz問題をVBAとGASでクラスを使って(GASというかJavaScriptではクラスという言い方はしないらしい…)書いてみました。
VBAはコンストラクタ(Class_Initialize())で引数をとれないのががが。。
GASは this キーワードがちょっと煩わしい感じ。。
あと、いまひとつ中かっこ後のセミコロンの要不要がわかってません。
【VBA】
'[クラスモジュール - classFizzBuzz] Option Explicit Dim mMin As Long Dim mMax As Long Dim mNum As Long Private Sub Class_Initialize() mMin = 1 mMax = 100 mNum = 1 End Sub Public Sub Constructor(ByRef min As Long, ByRef max As Long) mMin = min mMax = max mNum = min End Sub Public Function hasNext() As Boolean mNum = mNum + 1 hasNext = (mNum <= mMax) End Function Public Function getFizzBuzz() As String Dim res As String res = "" If mNum Mod 3 = 0 Then res = "Fizz" End If If mNum Mod 5 = 0 Then res = res & "Buzz" End If If res = "" Then res = CStr(mNum) End If getFizzBuzz = res End Function
'[標準モジュール] Option Explicit Public Sub myFunction() Dim fizzBuzz As classFizzBuzz Set fizzBuzz = New classFizzBuzz Call fizzBuzz.Constructor(1, 100) Do Debug.Print fizzBuzz.getFizzBuzz Loop While fizzBuzz.hasNext Set fizzBuzz = Nothing End Sub
【GAS】
var FizzBuzz = function(min, max) { this.min = min; this.max = max; this.num = min; this.hasNext = function() { this.num++; return (this.num <= max); }; this.getFizzBuzz = function() { var res = ''; if (this.num % 3 == 0) { res = 'Fizz'; } if (this.num % 5 == 0) { res += 'Buzz'; } if (res == '') { res = this.num; } return res; }; }; function myFunction() { var fizzBuzz = new FizzBuzz(1, 100); do { Logger.log(fizzBuzz.getFizzBuzz()); } while (fizzBuzz.hasNext()); }