AE エクスプレッションのパラメーターを変数にした時に起こるエラー　解決済み

#linear()を設定したいのですが・・・

```jsx
var a = thisComp.layer("調整レイヤー 1").effect("linear").name; //linear
var b = thisComp.layer("調整レイヤー 1").effect("ease").name; //ease
var c = thisComp.layer("調整レイヤー 1").effect("easeIn").name; //easeIn
var d = thisComp.layer("調整レイヤー 1").effect("easeOut").name; //easeOut

var arry = [a,b,c,d];

var setId;
for (i = 0 ; i<arry.length; i++){
	if (thisComp.layer("調整レイヤー 1").effect(arry[i])("チェックボックス") ==1){
		setId=thisComp.layer("調整レイヤー 1").effect(arry[i]).name;
		break;
	}else{
		setId=thisComp.layer("調整レイヤー 1").effect(arry[0]).name;
	}
}
setId+"(time,0,2,0,100);"
```

これをソーステキストに書くと
linear(time,0,2,0,100);
で返ってくるのですが、不透明に

```jsx
var a = thisComp.layer("調整レイヤー 1").effect("linear").name; //linear
var b = thisComp.layer("調整レイヤー 1").effect("ease").name; //ease
var c = thisComp.layer("調整レイヤー 1").effect("easeIn").name; //easeIn
var d = thisComp.layer("調整レイヤー 1").effect("easeOut").name; //easeOut

var arry = [a,b,c,d];

var setId;
for (i = 0 ; i<arry.length; i++){
	if (thisComp.layer("調整レイヤー 1").effect(arry[i])("チェックボックス") ==1){
		setId=thisComp.layer("調整レイヤー 1").effect(arry[i]).name;
		break;
	}else{
		setId=thisComp.layer("調整レイヤー 1").effect(arry[0]).name;
	}
}
setId(time,0,2,0,100);
```

で書くとエラーが起きます・・・パラメーターって変数にしちゃだめなんでしょうか・・・

.nameが必要じゃないとこにあったりしましたが、それも直したのですがダメでした。
やはりパラメーターが引っかかっているのかと思います。

#解決策
さらにswitchを追加しました。
本来はポジションに適用させる予定でしたので、そのソースになっています。
それでは解決出来たソースコードです。


```jsx
a = thisComp.layer("control").effect("linear");
b = thisComp.layer("control").effect("ease");
c= thisComp.layer("control").effect("easeIn");
d = thisComp.layer("control").effect("easeOut");

var array = [a,b,c,d];

for (i = 0 ; i <array.length; i++){
    if (array[i]("チェックボックス") == 1){
	switch( array[i].name ) {
	case "linear":linear(time,0,1,[0,0],[1920,1080])
	break;
	case "ease":ease(time,0,1,[0,0],[1920,1080])
	break;
    case "easeIn":easeIn(time,0,1,[0,0],[1920,1080])
	break;
    case "easeOut":easeOut(time,0,1,[0,0],[1920,1080])
	break;
	}
    break;
    }

    else if (array[i]("チェックボックス") == 0){
            "何も選択されていませんの処理"
        }
}
```

#解説（伝えるのが下手ですみません。）

arrayの中にはチャックボックスのどれがオンになっている判定する為に
エフェクトのチェックボックスのオブジェクトが入っています。
![キャプチャ.JPG](https://qiita-image-store.s3.amazonaws.com/0/178061/c1c7283d-fe69-fd2c-074b-75e019a7a6b5.jpeg)

まずはfor文でarrayの中身を全て対象にします。

```jsx
for (i = 0 ; i <array.length; i++){}
```

その中にチェックボックスがオンの場合ブレーク

```jsx
if (array[i]("チェックボックス") == 1){break;}
```

switchでチェックボックスがオンの時のチェックボックスの名前を参照させ、エクスプレッションを適させました。

```jsx
    switch( array[i].name ) {
    case "linear":linear(time,0,1,[0,0],[1920,1080])
    break;
    case "ease":ease(time,0,1,[0,0],[1920,1080])
    break;
    case "easeIn":easeIn(time,0,1,[0,0],[1920,1080])
    break;
    case "easeOut":easeOut(time,0,1,[0,0],[1920,1080])
    break;
    }
```
#はたしてこれがスマートなのかもわからない
何か無駄に変な事をしているような気がしますが、プログラムの理解を深めるためにも勉強になりました(笑)

#追加
さらに先程のソースだとチェックボックスが２個以上アクティブな時の処理は無かったので追加しました。
チャックボックスの表記をマッチネームに変更しています。

```jsx
Fade = timeToFrames(thisComp.layer("control").effect("fade /s")("ADBE Slider Control-0001"));
Dur =timeToFrames(thisComp.layer("control").effect("Dur /s")("ADBE Slider Control-0001"));
t=timeToFrames(time);

a = thisComp.layer("control").effect("linear");
b = thisComp.layer("control").effect("ease");
c= thisComp.layer("control").effect("easeIn");
d = thisComp.layer("control").effect("easeOut");

var array = [a,b,c,d];
var onArray = [];
for (i = 0 ; i <array.length; i++){
	if (array[i]("ADBE Checkbox Control-0001") == 1){
	onArray.push(array[i])
	}
}


for (i = 0 ; i <array.length; i++){
    if ((array[i]("ADBE Checkbox Control-0001") == 1) && (onArray.length == 1)){
    switch( array[i].name ) {
    case "linear":;linear(t,0,Fade,100,0);
    break;
    case "ease":;ease(t,0,Fade,100,0);
    break;
    case "easeIn":easeIn(t,0,Fade,100,0);
    break;
    case "easeOut":easeOut(t,0,Fade,100,0);
    break;
    }
    break;
    }

    else{
            [value]
        }
}


if (t > Fade+Dur){

for (i = 0 ; i <array.length; i++){
    if ((array[i]("ADBE Checkbox Control-0001") == 1) && (onArray.length == 1)){
    switch( array[i].name ) {
    case "linear":;linear(t,Fade+Dur,(Fade*2)+Dur,0,100);
    break;
    case "ease":;ease(t,Fade+Dur,(Fade*2)+Dur,0,100);
    break;
    case "easeIn":easeIn(t,Fade+Dur,(Fade*2)+Dur,0,100);
    break;
    case "easeOut":easeOut(t,Fade+Dur,(Fade*2)+Dur,0,100);
    break;
    }
    break;
    }

    else{
            [value]
        }
}
}


```