実現したいこと
以下のようにユーザの所在地(都市、国)を整形した文字列に変換したいです。
- 入力されている location_info オブジェクトから、LocalityName(都市)、SubAdministrativeAreaName(都市圏)、AdministrativeAreaName(州)、CountryName(国)を取得し、整形して出力する。
- もし都市名がない場合は都市圏名、さらにない場合は州名、最終的に国名を取得して表示する。
- それらが全てない場合はデフォルトの文字列(例:「Middle-of-Nowhere, Planet Earth」)を表示する。
前提
リーダブルコードを読んで、どうリファクタリングすべきか理解したいと思っているのですが、現時点で以下のコードがよくわかりません。
ユーザの所在地情報は location_info というオブジェクトに格納されており、以下のプロパティを含んでいます。
- LocalityName: 都市名
- SubAdministrativeAreaName: 都市圏名
- AdministrativeAreaName: 州名
- CountryName: 国名
現在、以下のようなコードでユーザの所在地を文字列にしていますが、リファクタリングしてコードをより読みやすくしたいと考えています。
発生している問題・エラーメッセージ
現在、コードが少し冗長で理解しにくい状態です。
コードをリファクタリングして、より簡潔で可読性の高い形にしたいです。
該当のソースコード
JavaScript
1var place = location_info["LocalityName"]; // 例 : "Santa Monica" 2if (!place) { 3 place = location_info["SubAdministrativeAreaName"]; // 例 : "Los Angeles" 4 if (!place) { 5 place = location_info["AdministrativeAreaName"]; // 例 : "California" 6 if (!place) { 7 place = "Middle-of-Nowhere"; 8 if (location_info["CountryName"]) { 9 place += ", " + location_info["CountryName"]; // 例 : "USA" 10 } else { 11 place += ", Planet Earth"; 12 } 13 } 14 } 15} 16return place;
試したこと
リファクタリングを進めるために、以下のコードで変数名を整理しました:
JavaScript
1var town = location_info["LocalityName"]; // 例 : "Santa Monica" 2var city = location_info["SubAdministrativeAreaName"]; // 例 : "Los Angeles" 3var state = location_info["AdministrativeAreaName"]; // 例 : "CA" 4var country = location_info["CountryName"]; // 例 : "USA"
ただし、これをどのようにリファクタリングすべきかまだ決められませんでした。

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。