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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

Q&A

1回答

606閲覧

[パフォーマンス]If文を書いてコードを少なくするか、コードを多くしてIf文を減らすか

yamayamayamaaa

総合スコア0

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

0グッド

2クリップ

投稿2022/05/03 06:31

前提

Flutterのパフォーマンスについて質問があります。
プログラミング初心者でどういう文を書くと効率がいいか全くわかりません。
その中でも、一番しておきたい、同じようなタイルが並ぶが、押したときの処理などが違うとき、一つのタイルを用意し、if文でちょっとづついじっていくのか、それぞれ、ひとつづつ用意したほうがいいのか疑問に思っています。

僕の考え

僕の考えとしては、後者だとコードが多くなりすぎるのでif文を使うべきと思い今はif文を積極的に使っています。
ただif文は使いすぎるとパフォーマンスが落ちるという情報や、コードの見易さ、作りやすさで考えれば前者のほうがいいのかと思っています。

どうかアドバイスいただけると嬉しいです。よろしくお願いします。

参考までにこういうコードです。

Dart

1 2 3final textFormStringProvider = StateProvider((ref) => ''); 4final StateProvider<String> timeProvider = 5 StateProvider((ref) => '期限時間が未指定です。(任意)'); 6final genreStateProvider = StateProvider((ref) => '未指定'); 7final priorityStateProvider = StateProvider((ref) => '未指定'); 8 9final emailControllerStateProvider = StateProvider.autoDispose((ref) { 10 return TextEditingController(text: ''); 11}); 12final StateProvider<String> dateProvider = 13 StateProvider((ref) => '期限日が未指定です。(任意)'); 14 15class CreateTodo extends ConsumerWidget { 16 List<String> selectGenre = ['仕事', '趣味', '買い物', '料理']; 17 List<String> selectPriority = ['高い', '普通', '低い']; 18 19 TimeOfDay? selectedTime; 20 late String textFormString; 21 late String date; 22 late String usualDate; 23 late String time; 24 late String usualTime; 25 26 late String genre; 27 late String name; 28 late String priority; 29 30 late var textFormStringNotifier; 31 late var dateNotifier; 32 late var timeNotifier; 33 late var genreNotifier; 34 late var priorityNotifier; 35 36 bool dateTap = false; 37 bool timeTap = false; 38 bool dateNo = false; 39 40 Future _pickTime(BuildContext context) async { 41 final initialTime = TimeOfDay(hour: 10, minute: 0); 42 43 final newTime = 44 await showTimePicker(context: context, initialTime: initialTime); 45 46 if (newTime != null) { 47 timeNotifier 48 .update((state) => time = '${newTime.hour}時${newTime.minute}分'); 49 timeTap = true; 50 } else { 51 return; 52 } 53 } 54 55 56 Widget build(BuildContext context, WidgetRef ref) { 57 final textControllerProvider = ref.watch(emailControllerStateProvider); 58 textFormString = ref.watch(textFormStringProvider); 59 textFormStringNotifier = ref.watch(textFormStringProvider.notifier); 60 date = ref.watch(dateProvider); 61 usualDate = date; 62 dateNotifier = ref.watch(dateProvider.notifier); 63 time = ref.watch(timeProvider); 64 timeNotifier = ref.watch(timeProvider.notifier); 65 usualTime = time; 66 genre = ref.watch(genreStateProvider); 67 genreNotifier = ref.watch(genreStateProvider.notifier); 68 priority = ref.watch(priorityStateProvider); 69 priorityNotifier = ref.watch(priorityStateProvider.notifier); 70 71 bool timeNo = true; 72 73 Map<String, String> todoInformation = { 74 '入力されたテキスト': textFormString, 75 '期限日': usualDate, 76 '期限時間': usualTime, 77 'ジャンル': genre, 78 '優先度': priority, 79 }; 80 81 return Scaffold( 82 appBar: AppBar(), 83 body: SingleChildScrollView( 84 child: Column(children: [ 85 buildTextForm(textControllerProvider), 86 ChoiceButton( 87 context, 88 Icons.calendar_month, 89 '日付', 90 selectGenre, 91 ), 92 ChoiceButton( 93 context, 94 Icons.alarm, 95 '時間', 96 selectGenre, 97 ), 98 ChoiceButton( 99 context, 100 Icons.widgets, 101 'ジャンル', 102 selectGenre, 103 ), 104 ChoiceButton( 105 context, 106 Icons.priority_high, 107 '優先度', 108 selectPriority, 109 ), 110 ElevatedButton( 111 child: Text('決定'), 112 onPressed: () async { 113 114 115 116 var collection = 117 FirebaseFirestore.instance.collection('country'); 118 var docSnapshot = 119 await collection.doc('basicInformation').get(); 120 if (docSnapshot.exists) { 121 Map<String, dynamic> data = docSnapshot.data()!; 122 123 // You can then retrieve the value from the Map like this: 124 name = data['todoNumber']; 125 } 126 127 Navigator.pop(context, true); 128 129 FirebaseFirestore.instance 130 .collection('country') 131 .doc("information") 132 .update({"todo$name": todoInformation}); 133 134 int store = name + 1; 135 136 FirebaseFirestore.instance 137 .collection('country') 138 .doc("basicInformation") 139 .set({"todoNumber": store}); 140 } 141 }, 142 ), 143 ]), 144 )); 145 } 146 147 Row buildTextForm(TextEditingController textControllerProvider) { 148 return Row( 149 children: [ 150 Icon( 151 Icons.edit, 152 size: 50, 153 ), 154 Expanded( 155 child: TextFormField( 156 keyboardType: TextInputType.multiline, 157 maxLines: 2, 158 minLines: 1, 159 decoration: InputDecoration( 160 hintText: 'なにをしますか?', 161 ), 162 controller: textControllerProvider, 163 enabled: true, 164 style: TextStyle(color: Colors.black, fontSize: 40), 165 obscureText: false, 166 onChanged: (text) { 167 textFormStringNotifier.update((state) => textFormString = text); 168 }), 169 ), 170 ], 171 ); 172 } 173 174 ChoiceButton( 175 BuildContext context, 176 var icons, 177 String kind, 178 List<String> select, 179 ) { 180 return Container( 181 margin: EdgeInsets.symmetric(vertical: 10), 182 child: Row(children: [ 183 Icon( 184 icons, 185 size: 50, 186 ), 187 Container( 188 width: 275, 189 decoration: BoxDecoration( 190 border: const Border( 191 bottom: const BorderSide( 192 color: Colors.black, 193 width: 0.15, 194 ), 195 )), 196 child: TextButton( 197 child: Text(genreorpriority(kind), style: TextStyle()), 198 onPressed: () async { 199 if (kind == '日付') { 200 final DateTime? picked = await showDatePicker( 201 locale: const Locale("ja"), 202 context: context, 203 initialDate: DateTime.now(), 204 firstDate: new DateTime(2018), 205 lastDate: 206 new DateTime.now().add(new Duration(days: 360))); 207 208 if (picked != null) { 209 // 日時反映 210 dateNotifier.update((state) => dateNotifier.state = 211 '${picked.month}月${picked.day}日${weekday(picked.weekday)}曜日'); 212 dateTap = true; 213 // setState(() => _date = picked); 214 } 215 } else if (kind == '時間') { 216 _pickTime(context); 217 } 218 if (kind == 'ジャンル' || kind == '優先度') { 219 var result = await showModalBottomSheet<int>( 220 context: context, 221 builder: (BuildContext context) { 222 return Column( 223 mainAxisSize: MainAxisSize.min, 224 children: <Widget>[ 225 selecrListtile(select, kind, context) 226 ]); 227 }, 228 ); 229 } 230 }), 231 ), 232 TextButton( 233 onPressed: () => { 234 if (kind == '時間') 235 {timeNotifier.update((state) => timeNotifier.state = '未指定')}, 236 if (kind == '日付') 237 {dateNotifier.update((state) => dateNotifier.state = '未指定')} 238 }, 239 child: Text( 240 '未指定', 241 style: TextStyle(color: Colors.pink), 242 ), 243 ) 244 ]), 245 ); 246 } 247 248 selecrListtile(List<String> select, kind, context) { 249 return Container( 250 child: Column(children: [ 251 ListTile( 252 leading: Icon(Icons.add), 253 title: Text('選択肢を追加する'), 254 onTap: () async { 255 await Navigator.pushNamed(context, "/choice_add").then((value) { 256 final a = value; 257 select.add('$a'); 258 }); 259 }), 260 SizedBox( 261 height: 300, 262 child: ListView.builder( 263 shrinkWrap: true, 264 itemCount: select.length, 265 itemBuilder: (BuildContext context, int index) { 266 return ListTile( 267 title: Text(select[index]), 268 onTap: () { 269 Navigator.pop(context); 270 kind == 'ジャンル' 271 ? genreNotifier.update((state) => genre = select[index]) 272 : priorityNotifier 273 .update((state) => priority = select[index]); 274 }); 275 }), 276 ), 277 ])); 278 } 279 280 genreorpriority(String kind) { 281 if (kind == 'ジャンル') { 282 return genre; 283 } 284 if (kind == '優先度') { 285 return priority; 286 } 287 if (kind == '日付') { 288 return usualDate; 289 } 290 if (kind == '時間') { 291 return usualTime; 292 } 293 } 294 295 weekday(date) { 296 if (date == 1) { 297 return '月'; 298 } 299 if (date == 2) { 300 return '火'; 301 } 302 if (date == 3) { 303 return '水'; 304 } 305 if (date == 4) { 306 return '木'; 307 } 308 if (date == 5) { 309 return '金'; 310 } 311 if (date == 6) { 312 return '土'; 313 } 314 if (date == 7) { 315 return '日'; 316 } 317 } 318} 319 320

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

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

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

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

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

YT0014

2022/05/03 07:49

タグObjective-C、Swift、kotlinは、どう関係するのでしょうか? 関係がない場合、質問を編集して、該当するタグの削除をお願いします。
yamayamayamaaa

2022/05/03 07:50

モバイルアプリの開発という点やif文を使うという共通点からタグ付けしました。
YT0014

2022/05/03 11:26

この質問では、Objective-C、Swift、kotlinの知見に意味がなく、各タグをキーに検索する際のノイズになりますので、重ねて削除をお願いします。
guest

回答1

0

実際にパフォーマンス(?)が落ちるなら、それはそのときに考えればいいのでは。

投稿2022/05/03 07:08

y_waiwai

総合スコア87774

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問