おれはでんしゃ
03/24/2025, 1:45 PMfunction renderExample(entity, version){
var set1 = ver == 7 && valOld1 1 ? valOld1 : ver == 12 && valLatest1 ? valLatest1 : 0.0 ;
var set2 = ver == 7 && valOld ? valOld2 : ver == 12 && valLatest 2 ? valLatest2 : 0.0 ;
etc……
}
上のように、都度三項演算子で比較して、バージョンを分ける方式
メリット
・コードがスッキリして、可読性が上がりそう
デメリット
・動作を明確に予想できなさそう
②別々場合分け
function renderExample(entity, version){
var set1, set2 ;
if( ver == 7 ){
set1 = valOld1 ? ValOld1 : 0.0 ;
set2 = valOld2 ? ValOld2 : 0.0 ;
}else if( ver == 12 ){
set1 = valLatest1 ? valLatest1 : 0.0 ;
set2 = valLatest2 ? valLatest2 : 0.0 ;
}
}
バージョン分けをifで行い、宣言と代入を分ける方式
メリット
・バージョンごとに動く動作が確実になる
デメリット
・開発がやりづらい、書き落としの可能性が出る
以上二つを考えました
より良いやり方をご存知だったり、実際に開発経験のある方がいらっしゃいましたら、ご教示頂けると幸いです
よろしくお願いします🙇
【脚注】
・valOld1 とか ValLatest1 とかには、nullかintの数値が入ります
他の型が入っても後で型絞れば共通で考えて良いかなと思っています
・null避けを確実にするために三項演算子をどちらにも入れていますが、もしかしたらjavascriptって0だとfalseになる時があるので、速度とかの取得には向いてないかもしれません
・より汎用性を上げるために、型ごと、シチュエーションごとにより良い記述があったりしたら、別個教えていただきたいと思います🙏おれはでんしゃ
03/24/2025, 1:50 PMhi03
03/24/2025, 2:42 PMjs
var isOldVer = RTMCore.VERSION.indexOf("1.7.10") !== -1;
function onUpdate(entity, scriptExecuter) {
//変数
var dataMap = entity.getResourceState().getDataMap();
var world = entity.field_70170_p;
var rider = null;
if (isOldVer) {
rider = entity.field_70153_n;
}
else {
var passengers = entity.func_184188_bt();
rider = passengers.size() > 0 ? passengers.get(0) : null;
}
var ridingEntity = null;
if (isOldVer) ridingEntity = entity.field_70154_o;
else ridingEntity = entity.func_184187_bx();
//処理
//⋮
}
js
var isOldVer = RTMCore.VERSION.indexOf("1.7.10") !== -1;
function onUpdate(entity, scriptExecuter) {
//変数
var dataMap = entity.getResourceState().getDataMap();
var world = entity.field_70170_p;
var rider = getRider(entity);
var ridingEntity = getRidingEntity(entity);
//処理
//⋮
}
function getRider(entity) {
if (isOldVer) {
return entity.field_70153_n;
}
else {
var passengers = entity.func_184188_bt();
var rider = passengers.size() > 0 ? passengers.get(0) : null;
return rider;
}
}
function getRidingEntity(entity) {
if (isOldVer) return entity.field_70154_o;
else return entity.func_184187_bx();
}
前者はごちゃごちゃしてるのに比べて後者はスッキリしていて、個人的には保守性(読みやすさ)に優れているかなと思ってます。関数化することで別のスクリプトを書くときに流用することもできます。hi03
03/24/2025, 3:00 PMjs
//ワンライナー化できるけど読みにくい
function test(flag1, flag2) {
return flag1 === flag2 ? flag1 : flag2 < flag1 ? flag2 : flag1;
}
//多少はマシだけど入れ子になってて読みにくい
function test(flag1, flag2) {
var isSameValue = flag1 === flag2;
var isMinimumFlag2 = flag2 < flag1;
return isSameValue ? flag1 : isMinimumFlag2 ? flag2 : flag1;
}
//条件分岐と内容が1:1で理解しやすい
function test(flag1, flag2) {
if (flag1 === flag2) return flag1;
else if (flag2 < flag1) return flag2;
else return flag1;
}
//どういうときに三項演算子が活用できるか?
//記述量が少ないとき/内容が似ているときは活用できる(条件分岐に変数を使うなど)
var branchDir = isLeftDir ? "left" : "right";
var glList = isOldVer ? GLHelper.generateGLList() : GLHelper.generateGLList(null);
var subRailModelSet = isKaizPatch ? subRail.getModelSet() : subRail.getResourceSet();
var startAnchorPitch = (isKaizPatch || !isOldVer) ? startRP.anchorPitch : straightPitch;
//などhi03
03/24/2025, 3:13 PMjs
function test(arg1){
//arg1が0やnull、undefined等であるとき、変数numに0を与える
var num = arg1 || 0;
var num = arg1 ? arg1 : 0;
var num = 0;
if (arg1) num = arg1;
}おれはでんしゃ
03/24/2025, 3:20 PMおれはでんしゃ
03/24/2025, 3:20 PM