質問するログイン新規登録

Q&A

解決済

2回答

273閲覧

【Android Studio/Kotlin】なぜテキストを2回記述するのか

chanco22

総合スコア3

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

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

0グッド

0クリップ

投稿2025/11/18 02:41

0

0

実現したいこと

テキストの記述を1回にしたい

発生している問題・分からないこと

Developer.Androidというサイトのトレーニングコースを受講中です。
テキストと画像を表示する簡単なアプリを作るという課題で、以下のソースコードが回答例として出されました。
疑問点は、テキストを記述するコードが2回登場する点です。
stringResource(R.string.happy_birthday_text),
stringResource(R.string.signature_text)

上部のclass MainActivity~のところと
下部のprivate fun BirthdayCardPreview~のところの2回登場します。
何故同じことを2回も記述しているのでしょうか。
また、1度の記述で済ませるにはどのようなコードにすればよいのでしょうか。

該当のソースコード

package com.example.happybirthday import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.example.happybirthday.ui.theme.HappyBirthdayTheme class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { HappyBirthdayTheme { // A surface container using the 'background' color from the theme Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { GreetingImage( stringResource(R.string.happy_birthday_text), stringResource(R.string.signature_text) ) } } } } } @Composable fun GreetingText(message: String, from: String, modifier: Modifier = Modifier) { // Create a column so that texts don't overlap Column( verticalArrangement = Arrangement.Center, modifier = modifier ) { Text( text = message, fontSize = 100.sp, lineHeight = 116.sp, textAlign = TextAlign.Center, modifier = Modifier.padding(top = 16.dp) ) Text( text = from, fontSize = 36.sp, modifier = Modifier .padding(top = 16.dp) .padding(end = 16.dp) .align(alignment = Alignment.End) ) } } @Composable fun GreetingImage(message: String, from: String, modifier: Modifier = Modifier) { // Create a box to overlap image and texts Box(modifier) { Image( painter = painterResource(id = R.drawable.androidparty), contentDescription = null, contentScale = ContentScale.Crop, alpha = 0.5F ) GreetingText( message = message, from = from, modifier = Modifier .fillMaxSize() .padding(8.dp) ) } } @Preview(showBackground = false) @Composable private fun BirthdayCardPreview() { HappyBirthdayTheme { GreetingImage( stringResource(R.string.happy_birthday_text), stringResource(R.string.signature_text) ) } }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

片方の記述のみ削除してみると、エラーがでたりテキストが表示されなくなったりしました。

補足

プログラミング初学者です。回答について理解できなかったらすみません。

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

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

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

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

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

maisumakun

2025/11/18 02:56

> 片方の記述のみ削除してみると、エラーがでたりテキストが表示されなくなったりしました。 どのようなエラーが出たのかは重要な情報です。
chanco22

2025/11/18 06:15

まだ私には難しい領域だったようです。 もう少し学習が進んでから考えたいと思います。 コメントありがとうございました。
guest

回答2

0

何故同じことを2回も記述しているのでしょうか。
また、1度の記述で済ませるにはどのようなコードにすればよいのでしょうか。

トレーニングコースを受講中というのはつまり勉強中ということですね。
なら、まるっと聞くより何故なのか考えて複数の答えを出してみたり、1度の記述で済ませられるコードを書いてみたり(多少試されたようですが、必要なのはエラー等で止めるのでは無く動くまでやる)と、ご自身で考えて作ってその仮定や結果をご提示頂くことが、受講以上に勉強になると思います。

コードの書き方は、様々なレベル(言語だとか業界だとか企業だとかチームだとか個人だとか)として多様にあります。理由も、機能・構造・メンテナンス性・記述し易さ等ソレっぽいものから趣味・嗜好・経験・惰性・テキトウ・コピペ・宗教等色々です。
なので、極一部を切り取って『何故?』と問うと、最終的には書いた人にしか分かりません。

何事でも分からないうちは『全てに意味がある』と考えてあらゆるモノに意味を見出そうとしがちですが、例えば車の運転にしても初めは全方向を見て全てを把握しようとガチガチでうまく運転出来なくても、慣れれば、何が本当に必要で何が大して意味が無いのか分かって楽になるはずです。
『習うより慣れろ』とはプログラミングでも昔から言われたことです。受講中に何故と疑問に思った事を突き詰めるのは良い方向と思います。再度書きますが、エラーで止まった、動きが変になった、でも止まらず、その原因を仮定して確認し、対処して動くようにしてみてください。自ら行うことこそ最良の勉強・経験になり慣れることになると信じます。

投稿2025/11/18 04:27

jimbe

総合スコア13440

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

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

dodox86

2025/11/18 04:52

> 様々なレベル(言語だとか業界だとか企業だとかチームだとか個人だとか)として多様にあります。理由も、機能・構造・メンテナンス性・記述し易さ等ソレっぽいものから趣味・嗜好・経験・惰性・テキトウ・コピペ・宗教等色々です。 > なので、極一部を切り取って『何故?』と問うと、最終的には書いた人にしか分かりません。 この意見に収れんしますね。サンプルコードは往々にして冗長な部分があるもので、その方が初心の方がそのコードを初めて見たときに、上から下へ直列に見易いというメリットもありますから。あまり最初から最適化されていても、いじりにくいものです。自分で製品のコードをいちから書くようになって、長くメンテしていくようになれば、理由も自分で想像が付くようになりますし、もし、その理由が本当は違っていても、そういうコードにした理由は別に理由付けできて納得できるようになることもあります。理由は複数有り得る、と言うことですね。
dodox86

2025/11/18 05:01

> 自分で製品のコードをいちから書くようになって、 まぁ、この点に関してはこれからは機会が激減していくでしょうけれども、、、コードを手づから保守する作業の苦労をすれば、自分で分かるようになりますかね。それともそんな能力も実務では求められなくなりますか。コメント失礼しました。
chanco22

2025/11/18 06:14

ご回答ありがとうございます。
guest

0

ベストアンサー

Preview、つまり関数に対するテストで簡単に引数を差し替えられるように実装を分けているだけです
中間関数を用意してもいいと思います。

でもそもそもプレビューでの表示とメイン関数で呼び出すことはフローも目的も違うと思います
ちなみにそう言う関数の分離はこだわって構造化したりコンポーネント化するつもりがいならわざわざわけないってのも好みですよ

実際、サンプルコードでも関数がViewModelに依存しているようなものが多いですが、テストや再利用の観点からみると良くないです

投稿2025/11/18 03:54

編集2025/11/18 03:55
u2025

総合スコア130

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

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

chanco22

2025/11/18 06:14

ご回答ありがとうございます。 まだ私には難しい領域だったようです。もう少し学習を進めてから再度考えたいと思います。
u2025

2025/11/19 04:31

元のソースを探してきて見てみましたがなんで分けてるんでしょうね。 まあ難しさはあれど順番はないですので色々学ばれるとよいかと思います。 タイトルしかみてないですが、トレーニングコースもちゃんとまとまっている感じでまとまってる本とか別途購入しなくても公式ページでちゃんと学べそうですし。 それと質問をする際のアドバイスですが、参考にしたサイトがあれば事前に提供していれば回答者が探す手間が省けるでしょう。 (逆に混乱の種になる場合もありますが) https://developer.android.com/codelabs/basic-android-kotlin-compose-add-images?hl=ja&continue=https%3A%2F%2Fdeveloper.android.com%2Fcourses%2Fpathways%2Fandroid-basics-compose-unit-1-pathway-3%3Fhl%3Dja%23codelab-https%3A%2F%2Fdeveloper.android.com%2Fcodelabs%2Fbasic-android-kotlin-compose-add-images#0 https://github.com/google-developer-training/basic-android-kotlin-compose-birthday-card-app/blob/main/app/src/main/java/com/example/happybirthday/MainActivity.kt 自分が見たトレーニングチュートリアル https://developer.android.com/courses/android-basics-compose/course?hl=ja
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問