亀の甲羅2

今日もまた朝とく起きて励まなん窓に明るきありあけの月

GAS :基本構文(1)

//-[note]-------------------------------------------------------------
// refs. https://excel-ubara.com/apps_script1/
// ここのページを参考にさせていただきました。
// 記載が一部古いことが分かりましたが、基本的なことは今でも通用するものです。
// 勉強させていただき、ありがとうございました。
//--------------------------------------------------------------------

/*
 # GASとは

 * Google Apps Scriptは、Googleが提供するサーバーサイド・スクリプト環境
 * JavaScript互換言語

 # 基礎構文以外の知識

 * その時点で入力可能なオブジェクトはCtrl + Space で候補表示される
 * Ctrl + Sでスクリプト保存(自動保存は今のところされないみたい)
 * 文末にセミコロンは必須ではない(私はあった方が良いと思うが、pythonなどと揃えるなら書かなくてOK)
 */

function myFunction() {
  //-------------------------------------------------------------------------
  // * 使用可能文字、文字列
  // 大文字・小文字の区別あり
  // 当然ながら予約語があるので、それ以外の文字列を使用のこと

  //-------------------------------------------------------------------------
  // * コメントについて

  // これはコメント(コメント記法1:文末まで)
  
  /*
  これもコメント(コメント記法2:複数行など)
  */
  
  //-------------------------------------------------------------------------
  // * スクリプトを書く上での、ちょっとした知識(詳しくは知らなくてOK)
  //
  // (1) 処理結果を確認するためにセル出力方法(とりあえずこれだけ覚えておけ!)
  // refs. https://excel-ubara.com/apps_script1/GAS004.html 
  SpreadsheetApp.getActiveSheet().getRange(1, 1).setValue("Hello World")

  // (2) コンソールにログ出力する方法
  Logger.log("あほあほ");
  // 後で説明するけど、リアルタイムに確認しないログは「console.log(data)」で出力のこと
  // refs. https://tanuhack.com/gas-log/

  //-------------------------------------------------------------------------
  // * 変数について
  //
  // 変数宣言は必ず必要。変数に型は無しなので、実質、スコープを決めるだけの意味があると思われる。
  // Object の場合は、Set a = obj のようにSetを使う必要がなく、オブジェクトもメモリ上の値として考えてOK。

  var int_var, str_var, float_var, obj_var;
  var out_str = "HogeHuga"

  int_var = 100;
  str_var = "HogeHoge";
  float_var = 3.1415;
  obj_var = SpreadsheetApp.getActiveSheet();

  Logger.log(int_var);  // ★課題:出力が[100.0]と少数表示になる。整数を扱うにはどうするのかを調査のこと → 整数専用のデータ型が無い
  Logger.log(str_var);
  Logger.log(float_var);
  obj_var.getRange(1, 2).setValue(out_str);


  //-------------------------------------------------------------------------
  // * 繰り返しについて
  //
  // for breakが使える。ちょっと古いCベースのfor。
  // ★foreach、whileなどの存在は未調査 → foreachは無しだが、for - of構文、for - in構文はあり。whileはありだが、do-whileは無いようだ。
  // ★continueの存在も未調査 → continue あり(C言語と同等)

  for(var i = 2; i < 12; i++){
    obj_var.getRange(i, 1).setValue("Hello World")
  }

  // for - of オブジェクトの値を取出す(通常、配列の繰り返しはこちらを使用)
  const member = ['aaa', 'bbb', 'ccc', 'ddd'];

  for(const v of member){
    Logger.log(v);
  }

  // for - in オブジェクトのプロパティを取出す(取出される順序は無保証)
  const height = {Taro: 169, Jiro: 170, Saburo: 180};

  for(const v in height){
    Logger.log(`${v} - ${height[v]}`);
  }

  //-------------------------------------------------------------------------
  // * 条件分岐について
  //
  // 普通にif文が使える。Cベースかな
  // -eq とか訳わからん記号使わなくていいよ!(嬉しい!

  if(int_var == 99){
    Logger.log("99");
  }else if(int_var > 99){
    Logger.log("99 over");
  }else{
    Logger.log("知らんがな");
  }
  // ==, !=, <=, <, >=, >
  // === 値が等しいかつ、型が一致 (今のところ使用用途が分からん)
  // !== 値が等しくない、または型が不一致(またはその両方)

  // &&, ||, ! 論理演算

  // &, | ビット演算

  // ★MODとべき乗 については未調査 → MODはCと同じく%、べき乗はCと同じく**

  //-------------------------------------------------------------------------
  // * 条件分岐について(多段分岐)
  //
  // switchが使える。構文はCに準ずる。
  // 生ぬるい現代言語を使用しているとbreakを忘れるので注意!

  //-------------------------------------------------------------------------
  // * 真偽値について
  //
  // true, false を使える。(予約語)

  var bool_val = true

  if(bool_val){
    Logger.log("TRUE");
    bool_val = false
  }

  if(!bool_val){
    Logger.log("FALSE");
  }

}