関数の結果(戻り値)を利用して計算をしたり、配列に格納したい

836 views
Skip to first unread message

nasu eiji

unread,
May 24, 2015, 2:40:30 AM5/24/15
to google-app...@googlegroups.com
はじめまして

GASというよりもjavascriptについてかもしれませんがよろしくおねがいします。

関数の結果(戻り値)を利用して計算をしたり、関数の結果をオブジェクトに格納したいと考えています。

関数を代入した変数は、参照を返すため 計算できなかったり、オブジェクトには関数型として格納されるということかなと思うのですが、
それならそれで、計算結果を利用する方法があるはずと思うのですが 見つけることができません。

表現が分かりにくいと思いますので 下記のコードで補完します。

--------------------------------------------------------------------------------------
function LogTest(){
  
  var Tst1 =function (){
    a=1;
    b=5;
    return a*b;
  };
  
  var Tst2 = function (){
    c=2;
    d=4;
    return c+d;
  };

  var tst3 = Tst1 * Tst2;
     
  Logger.log(tst3);
}
  
------------------------------------------------------------------------------------

logはNaNになります。
これを30となるようにしたいのです。

初心者で どこかで考え違いをしているのかもしれませんが糸口が見出せません。

どうぞ よろしくお願いします。

前田修平

unread,
May 24, 2015, 3:26:48 AM5/24/15
to google-app...@googlegroups.com
即時関数を使いましょう。

Tatsuya Nakano

unread,
May 24, 2015, 3:52:56 AM5/24/15
to google-app...@googlegroups.com

関数の実行は()をつけましょう。

  var tst3 = Tst1 * Tst2;
  var tst3 = Tst1() * Tst2();


 


2015年5月24日日曜日 15時40分30秒 UTC+9 nasu eiji:

nasu eiji

unread,
May 24, 2015, 5:34:36 AM5/24/15
to google-app...@googlegroups.com
ご回答ありがとうございます。
色々試したつもりだったのですが、()をつけるのを忘れていたという申し訳ないことになってしましました。
 

元々書いていたコードを貼らせていただきます。

オブジェクトの値で 変数dSytudaiがfunction型で格納されているのを値にしたいのです。

お手数をおかけしますが引き続きよろしくお願いいたします。

----------------------------------------------------------------------------------------------------------------------------------------------
function getRanktest2(){
    
  // スプレッドシートを取得
  var book = SpreadsheetApp.getActiveSpreadsheet();

  // 単語登録シートを取得
  var sheet = book.getSheetByName("単語登録");
  
  // データを配列に格納
  // https://developers.google.com/apps-script/guides/sheets?hl=ja で直接データを取得できる方法記載
  
  var data = sheet.getDataRange().getValues();
  var dataLength = data.length;
  for (var i = 1; i < dataLength; i++);

  // 前回までの結果の評価
  // 結果シートの取得
  
  var rsheet = book.getSheetByName("stock"); 
  var r_data = rsheet.getDataRange().getValues();
  var rdataLength = r_data.length;
  for (var n = 1; n < rdataLength; n++);

  
  // 格納するオブジェクトを作成⇒newで作成するコンストラクタ
  
  var ob_Data = function(dNo,dRank,dWord,dHinsi1,dImi1,dHinsi2,dImi2,dHatuon,dMemo,dKako,dRei,dSyu,dT,dP){
  this.dNo = dNo;
  this.dRank = dRank;
  this.dWord = dWord;
  this.dHinsi1 = dHinsi1;
  this.dImi1 = dImi1;
  this.dHinsi2 = dHinsi2;
  this.dImi2 = dImi2;
  this.dHatuon = dHatuon;
  this.dMemo = dMemo;
  this.dKako = dKako;
  this.dRei = dRei;
  this.dSyu = dSyu;
  this.dT =  dT;
  this.dP = dP;
}
  
  // 単語登録上のデータをオブジェクトに格納

  var r = 1; 
  var d_word = data[r][2];
  
   // オブジェクトで利用する関数 ストックデータの集計
    var dSyutudai = function(){
    kyoutuu();
    return con_syu;
    };
    var dTrue = function(){
    kyoutuu();
    return con_true;
    };
    var dPar = dTrue()/dSyutudai();
  
    var obData = new ob_Data(data[r][0],data[r][1],d_word,data[r][3],data[r][4],data[r][5],data[r][6],data[r][7],
                           data[r][8],data[r][9],data[r][10],dSyutudai,dTrue,dPar); //datasliceを考える
     

    
    //部品----------------countデータの共通関数
    function kyoutuu(){
      con_syu=0;
      con_true=0;      
      for( var s = 1; s < rdataLength; s++){
      
        if(r_data[s][1] == d_word){
          con_syu++;
          con_true = con_true + r_data[s][3];
        }
    }
    };  //ここまで function kyoutuu
    

  Logger.log(dSyutudai());
  Logger.log(dTrue()); 
  Logger.log(dPar); 
  Logger.log(obData.dWord); 
  Logger.log(obData.dSyutudai);
  Logger.log(obData);
  Logger.log(typeof dSyutudai);
}
-----------------------------------------------------------------------------------------------------------



2015年5月24日日曜日 16時52分56秒 UTC+9 Tatsuya Nakano:
Reply all
Reply to author
Forward
0 new messages