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

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

新規登録して質問してみよう
ただいま回答率
87.20%
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の代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

受付中

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

yamayamayamaaa
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の代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

1回答

0評価

2クリップ

222閲覧

投稿2022/05/03 06:31

前提

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

僕の考え

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

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

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

Dart

final textFormStringProvider = StateProvider((ref) => ''); final StateProvider<String> timeProvider = StateProvider((ref) => '期限時間が未指定です。(任意)'); final genreStateProvider = StateProvider((ref) => '未指定'); final priorityStateProvider = StateProvider((ref) => '未指定'); final emailControllerStateProvider = StateProvider.autoDispose((ref) { return TextEditingController(text: ''); }); final StateProvider<String> dateProvider = StateProvider((ref) => '期限日が未指定です。(任意)'); class CreateTodo extends ConsumerWidget { List<String> selectGenre = ['仕事', '趣味', '買い物', '料理']; List<String> selectPriority = ['高い', '普通', '低い']; TimeOfDay? selectedTime; late String textFormString; late String date; late String usualDate; late String time; late String usualTime; late String genre; late String name; late String priority; late var textFormStringNotifier; late var dateNotifier; late var timeNotifier; late var genreNotifier; late var priorityNotifier; bool dateTap = false; bool timeTap = false; bool dateNo = false; Future _pickTime(BuildContext context) async { final initialTime = TimeOfDay(hour: 10, minute: 0); final newTime = await showTimePicker(context: context, initialTime: initialTime); if (newTime != null) { timeNotifier .update((state) => time = '${newTime.hour}時${newTime.minute}分'); timeTap = true; } else { return; } } Widget build(BuildContext context, WidgetRef ref) { final textControllerProvider = ref.watch(emailControllerStateProvider); textFormString = ref.watch(textFormStringProvider); textFormStringNotifier = ref.watch(textFormStringProvider.notifier); date = ref.watch(dateProvider); usualDate = date; dateNotifier = ref.watch(dateProvider.notifier); time = ref.watch(timeProvider); timeNotifier = ref.watch(timeProvider.notifier); usualTime = time; genre = ref.watch(genreStateProvider); genreNotifier = ref.watch(genreStateProvider.notifier); priority = ref.watch(priorityStateProvider); priorityNotifier = ref.watch(priorityStateProvider.notifier); bool timeNo = true; Map<String, String> todoInformation = { '入力されたテキスト': textFormString, '期限日': usualDate, '期限時間': usualTime, 'ジャンル': genre, '優先度': priority, }; return Scaffold( appBar: AppBar(), body: SingleChildScrollView( child: Column(children: [ buildTextForm(textControllerProvider), ChoiceButton( context, Icons.calendar_month, '日付', selectGenre, ), ChoiceButton( context, Icons.alarm, '時間', selectGenre, ), ChoiceButton( context, Icons.widgets, 'ジャンル', selectGenre, ), ChoiceButton( context, Icons.priority_high, '優先度', selectPriority, ), ElevatedButton( child: Text('決定'), onPressed: () async { var collection = FirebaseFirestore.instance.collection('country'); var docSnapshot = await collection.doc('basicInformation').get(); if (docSnapshot.exists) { Map<String, dynamic> data = docSnapshot.data()!; // You can then retrieve the value from the Map like this: name = data['todoNumber']; } Navigator.pop(context, true); FirebaseFirestore.instance .collection('country') .doc("information") .update({"todo$name": todoInformation}); int store = name + 1; FirebaseFirestore.instance .collection('country') .doc("basicInformation") .set({"todoNumber": store}); } }, ), ]), )); } Row buildTextForm(TextEditingController textControllerProvider) { return Row( children: [ Icon( Icons.edit, size: 50, ), Expanded( child: TextFormField( keyboardType: TextInputType.multiline, maxLines: 2, minLines: 1, decoration: InputDecoration( hintText: 'なにをしますか?', ), controller: textControllerProvider, enabled: true, style: TextStyle(color: Colors.black, fontSize: 40), obscureText: false, onChanged: (text) { textFormStringNotifier.update((state) => textFormString = text); }), ), ], ); } ChoiceButton( BuildContext context, var icons, String kind, List<String> select, ) { return Container( margin: EdgeInsets.symmetric(vertical: 10), child: Row(children: [ Icon( icons, size: 50, ), Container( width: 275, decoration: BoxDecoration( border: const Border( bottom: const BorderSide( color: Colors.black, width: 0.15, ), )), child: TextButton( child: Text(genreorpriority(kind), style: TextStyle()), onPressed: () async { if (kind == '日付') { final DateTime? picked = await showDatePicker( locale: const Locale("ja"), context: context, initialDate: DateTime.now(), firstDate: new DateTime(2018), lastDate: new DateTime.now().add(new Duration(days: 360))); if (picked != null) { // 日時反映 dateNotifier.update((state) => dateNotifier.state = '${picked.month}月${picked.day}日${weekday(picked.weekday)}曜日'); dateTap = true; // setState(() => _date = picked); } } else if (kind == '時間') { _pickTime(context); } if (kind == 'ジャンル' || kind == '優先度') { var result = await showModalBottomSheet<int>( context: context, builder: (BuildContext context) { return Column( mainAxisSize: MainAxisSize.min, children: <Widget>[ selecrListtile(select, kind, context) ]); }, ); } }), ), TextButton( onPressed: () => { if (kind == '時間') {timeNotifier.update((state) => timeNotifier.state = '未指定')}, if (kind == '日付') {dateNotifier.update((state) => dateNotifier.state = '未指定')} }, child: Text( '未指定', style: TextStyle(color: Colors.pink), ), ) ]), ); } selecrListtile(List<String> select, kind, context) { return Container( child: Column(children: [ ListTile( leading: Icon(Icons.add), title: Text('選択肢を追加する'), onTap: () async { await Navigator.pushNamed(context, "/choice_add").then((value) { final a = value; select.add('$a'); }); }), SizedBox( height: 300, child: ListView.builder( shrinkWrap: true, itemCount: select.length, itemBuilder: (BuildContext context, int index) { return ListTile( title: Text(select[index]), onTap: () { Navigator.pop(context); kind == 'ジャンル' ? genreNotifier.update((state) => genre = select[index]) : priorityNotifier .update((state) => priority = select[index]); }); }), ), ])); } genreorpriority(String kind) { if (kind == 'ジャンル') { return genre; } if (kind == '優先度') { return priority; } if (kind == '日付') { return usualDate; } if (kind == '時間') { return usualTime; } } weekday(date) { if (date == 1) { return '月'; } if (date == 2) { return '火'; } if (date == 3) { return '水'; } if (date == 4) { return '木'; } if (date == 5) { return '金'; } if (date == 6) { return '土'; } if (date == 7) { return '日'; } } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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の知見に意味がなく、各タグをキーに検索する際のノイズになりますので、重ねて削除をお願いします。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

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の代替となることを目的に作られた、ウェブ向けのプログラミング言語である。