質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

Q&A

2回答

3174閲覧

「null(nil)でない場合のみ、文字列連結に加える」の皆さんのベストプラクティスを教えてください ※言語問わず

ururCam

総合スコア6

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

0グッド

0クリップ

投稿2020/06/05 01:26

「null(nil)でない場合のみ、文字列連結に加える」という、よくある処理の皆さんのベストプラクティスを教えてください。
さらに言うと、「nullと特定の値でない場合」などの条件が加味されていると大変ありがたいです。

いくつかの言語で開発し始めてみたくらいの経験値なのですが、
いつまでたっても上記処理のスマートな書き方が自分なりに見つけられません。
よろしければ皆さんのベストプラクティスをお教えください。

べたに書くと下記ように一つずつif文でnullチェックかと思いますが、スマートではないですよね。
三項演算子を使えば行数は減るでしょうが、好みも分かれる上文字列が長いと読みづらい気がし、避けてしまいます。
railsなどではblank?等で複数条件一緒に判定できるため、条件式は簡単になりそうですが
文字列を追加するか否か?という部分はあまり変わらないのかなとも思ったり。

何の言語でも学びがあると思いますので、どれでも構いません。
こんな風に書くとスマートな気がするよ!という書き方を色々とコメントしていただけると嬉しいです。

例:入力されたプロフィールをもとに、入力のある部分だけ、自己紹介文を作成する

java

1 2String name; 3Integer age; 4Boolean isJapanese; 5 6String text = "こんにちは。"; 7if(name != null) { 8 text += "私の名前は" + name * "です。"; 9} 10if(age != null && age > 0) { 11 text += "歳は" + age + "才になります。"; 12} 13if(isJapanese != null) { 14 if(isJapanese) { 15 text += "日本人です。"; 16 } else { 17 text += "日本人ではありません。" 18 } 19} 20

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

特に何に困っているのかわからないんですが。

https://teratail.com/help/avoid-asking

teratailは困っている人の質問を解決するサービスです。そのため、漠然とした興味から票を募るような質問や、意見の主張をすることを目的とした投稿は推奨していません。

何か困っている理由があり、最適解を見つける為の知見を得たい場合は、その理由や何が知りたいのかを明確に記述してください。

最適解がわからないという事であれば、それは個々のプロジェクトのガイドラインに従うべきで、

三項演算子を使えば行数は減るでしょうが、好みも分かれる上文字列が長いと読みづらい気がし、避けてしまいます。

という個人の主観で判断するのではなく、ガイドラインで禁じられて居ない限り、言語機能として許されているものは使って構わないと思います。むしろ、もしそれを禁止のであれば、禁止する理由を提示すべきだとは思います。

まぁ、例えばC#ならnull 許容参照型を使えば、そもそもnull値が入ることを抑制できるので、悩む事なく扱えたりはしますけど。

投稿2020/06/05 01:41

gentaro

総合スコア8949

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ururCam

2020/06/05 01:59

明確に伝わらなかったようですみません。 >票を募るような質問や、意見の主張をすることを目的 にしているわけではないことは、ご了承ください。 毎回事情は違いますが、個々のプロジェクトのガイドラインがほとんどまだ作られていないだとか、個人の勉強のために書いてみているだとか、そういう「私の裁量で自由な範囲」のコーディングに対して 「毎回このパターンのコードで漠然とした不安感があるな」という思いがあったため投稿した内容です。困っていないわけではないのですが、目的としては「学びを得たい、さまざまな解法から自分に合った最適解を見つけたい」です。 三項演算子について上記のような投稿をしたことがお気に障ったのでしたらすみません。 勉強のため調べてみると、かなり好みが分かれる印象だったことと、 質問内容にも記載しましたが私の減らしたい部分とは異なることを明記したくこのような書き方となりました。
gentaro

2020/06/05 02:05

気に障る云々ではなく、ここは質問サイトなので、個々の主観に基づいた「これがベストプラクティスである」という意見を募っても結論が出る事はないと思ったので、「ガイドラインに従え」という回答しかないと思うわけですが。 その手の意見(回答)はブログ等の別のメディアでやればいいですし、質問するぐらいならそういう記事を探してご自身で納得の行く解を得られば良いんじゃないでしょうか。
gentaro

2020/06/05 02:07

まぁ何が言いたいのかというと、ここはディスカッションをするためのサイトじゃないんで、そういう話をしたいのであれば別のプラットフォームを選びましょう、という事です。
ururCam

2020/06/05 02:22 編集

なるほど、確かに完全な回答は得られないような質問でした。 「このパターンコードをもう少しきれいに書けないか?」という疑問がそこまでガイドラインに沿わないほど、困っていない&質問として成り立たないとは感じず投稿してしまいました。議論向けでないことを考えておれず申し訳ありません。 記事などは調べたうえで、文字列連結にフォーカスをあてるとどうしても所人者向けというか、基本のコードしか見つけられなかったためこちらに質問したものです。 質問内容や目的を考え直してみます。
maisumakun

2020/06/05 02:51

> そこまでガイドラインに沿わないほど、困っていない&質問として成り立たないとは感じず 言語を問わないようにするなど、質問の範囲を広げすぎたのが良くなかった印象もあります。
gentaro

2020/06/05 04:29

まぁ私がそのように思っている、という受け取る側の問題でもあるし、運営が削除するような酷い質問でなければ別に謝る必要はないと思いますが。(関係ないけどここの運営はもっと積極的に関与するか、もう少し責任のあるモデレータを作って任せた方が良いと思う) 例えばですが、何か特定の言語についてのガイドラインを作成する立場にあって、その上で参考にした既存のガイドラインの間で相反している事項があり、どちらを採用するべきか悩んいる、といったような質問であれば、意思決定のための知見を得るために参考になる資料を回答してもらうなど、ここの使い方に沿った質問にはなると思います。そうしたQ&Aは後にここを見る人の参考にもなるでしょうから。
guest

0

「null(nil)でない場合のみ、文字列連結に加える」という、よくある処理の皆さんのベストプラクティスを教えてください。

Rubyであればほぼ考えなくて構いません。nil.to_sが空文字列になるので、文字列変換の上で連結してしまうのがいちばん合理的です。

ruby

1str += value.to_s 2"テキストへの埋め込み#{value}"

投稿2020/06/05 01:40

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/06/05 01:48

JavaScriptの場合、falsyなもの(false、undefined、空文字列、null、数値の±0、NaN)の中に必要な値がなければ、「(value || '')」で済ませるのが手っ取り早いです。
otn

2020/06/05 01:59

私も最初そう思ったのですが、コードを見ると、その変数だけ連結するんじゃないみたいです。 つまり、質問タイトルがおかしい。
ururCam

2020/06/05 02:03

タイトルがややこしく申し訳ないです…「ある変数がnull(nil)でない場合のみ、その変数と追加の文字列や特定の文字列を文字列連結させる」、みたいな感じでしょうか…?
maisumakun

2020/06/05 02:04

Railsだとブロック付きのtryも有効かもしれません。
maisumakun

2020/06/05 02:06 編集

配列が可変長・可変型にできる言語であれば、各パーツを配列に入れておいてnullを除外してからjoin、というような手段もあります。
ururCam

2020/06/05 02:11

皆様回答ありがとうございます。まずrubyのnil.to_sが空文字になるというのは存じ上げなかったため、ちょうどrailsに興味があったところなので参考にさせていただきます。 また、「配列に入れておいてnullを除外してからjoin」というのも様々な言語で有用そうで大変参考になります。
hentaiman

2020/06/05 02:18

人それぞれだけど、質問者はnull判定を含むロジックを追う時にifでチェックしてあるよりも配列に突っ込んでnull消して連結するプログラムの方が読みやすいと思うんですか?
dodox86

2020/06/05 02:50

タイトルがややこしいと言うより、やりたいことが反映されていないのです。コードを見ると、それぞれで別のロジックのはずです。私もコメント欄の皆さんと同じ疑問を持ちました。 > null(nil)でない場合のみ、文字列連結に加える」 だけ読むと、好き嫌いを除いたら3項演算子相当のロジックですむ話です。 ds += (ss != null) ? ss: ""; みたいな。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問