下記の関数内の2行を1行で書けるでしょうか。
javascript
1function test(){ 2 3 var id = getNewId(); 4 5 if(id == null)return; 6 7 //処理 8}
イメージとしては下記の様なもの?
javascript
1function test(){ 2 3 var id = getNewId() == null ? return : getNewId(); 4 5 //処理 6}
追記
ご回答有難うございます。
勉強になりました。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
{}
を使わずに全体が1文で書くことはできましたが、わかりやすいいいコードであるとはとても思えません。
JavaScript
1var list = [1, 2, 3]; 2function getNewId() { 3 return list.shift(); 4} 5 6function test(){ 7 for(var id = getNewId();id == null;)return; 8 console.log(id); 9} 10 11test(); 12test(); 13test(); 14test();
投稿2018/03/02 23:09
総合スコア21735
0
ベストアンサー
「セミコロンで区切って1行に詰め込む」というトンチしか、手段はないと思います。
「変数宣言」も「return
」も、それぞれ1文が必要な操作なので、両者を1文で同時に行うことはできません。
投稿2018/03/02 22:15
総合スコア145183
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
JSはC言語譲りのALGOL系の言語です。
JSコードゴルフでもやってるなら話は別ですが、
可読性が落ちるので普通の開発で1行で書く選択肢はありえません。
変数の宣言で1行、○○であれば条件分岐という流れで1行はどうしても欲しいです。
それが嫌なら、下記のような感じで工夫しましょう。
- そもそもJSを諦める
- 関数の内部で値を宣言せずに、引数として持ち込む作りを徹底する
JavaScript
1var test = function (id) { 2 if (id == null) return; 3 // 処理 4}
JSを捨てる手法はメタプログラミングって言うらしいですよ。
私も業務でAltJSを使っていた時期があり、真面目な選択肢としてありだと思ってます。
基本的な候補はCoffee系の記述量が減る言語ですかね。
TypeScript系はスーパーセットであり、型記述の為にコード量を増やす選択肢をしているので質問者さんとは相性が悪そうです。
あまり知りませんが、ScalaやNimなんかもJavaScriptが吐けるらしいですよ。
例えばCofeeScript系のAltJSの一つであるLiveScriptはひたすら簡素な記述なので
質問文の事を全て満たしたキモくなりがちなコードも、許せる長さに収まります。
LiveScript
1test = -> 2 return if not (id = get-new-id!)? 3 # 処理
投稿2018/03/03 06:05
総合スコア21158
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
できなくはないですね。
JavaScript
1"use strict"; 2function getNewId() { 3 return null; 4 // return 555; 5} 6function test() { 7 console.log( 'test' ); 8 switch ( getNewId() ) { case null: return; default: var id = getNewId(); } 9 console.log( 'done', id ); 10} 11test(); 12```**動くサンプル:**[https://jsfiddle.net/am2crzgL/](https://jsfiddle.net/am2crzgL/)
投稿2018/03/03 02:33
総合スコア69398
0
「変数宣言巻き上げ」を悪用してこんな感じで。
js
1var id = 'hoge'; 2 3function test(){ 4 if( ( id = getNewId() ) == null) return; else var id; //else節で宣言しても巻き上げられる 5 console.log(id); 6} 7 8function getNewId(){ 9 return null 10} 11 12test(); 13id; // 'hoge'
if...else...で1文とみなしていいのかが、ちょっと疑問ですが。
もう一つ思いついたので追記
js
1var id = 'hoge'; 2 3function test(){ 4 if( ( eval('var id'), id = getNewId() ) == null) return; //eval関数で宣言してもスコープ内で定義される 5 console.log(id); 6} 7 8function getNewId(){ 9 return null 10} 11 12test(); 13id; // 'hoge'
邪悪。
投稿2018/03/03 00:53
編集2018/03/03 01:14総合スコア36074
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/03 02:15
2018/03/03 03:04
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。