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

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

ただいまの
回答率

90.34%

確認とto_sの質問です。当方、プログラミング初心者です。

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 930

H-JURI

score 40



Rubyをベースにプログラミングを学んでいる超初心者です。課題に対する解答のコードで自分自身が認識している意味があっているのか確認して欲しいです。
問題は、小文字と空白で構成されている文ある。その単語それぞれの頭文字を大文字に変えるメソッドを書け、です。①が確認したいところで、②が質問です。

# Write a method that takes in a string of lowercase letters and
# spaces, producing a new string that capitalizes the first letter of
# each word.
#
# You'll want to use the `split` and `join` methods. Also, the String
# method `upcase`, which converts a string to all upper case will be
# helpful.


def capitalize_words(string)
  words = string.split(" ")
  
  i = 0
  while i < words.length       #iがsplitで分けられた単語の数より小さい場合以下を繰り返す・・・①
    word = words[i]              
    word[0] = word[0].upcase
    
    i += 1
  end
  
  return words.join(" ")
end

# These are tests to check that your code is working. After writing
# your solution, they should all print true.

puts(
  'capitalize_words("this is a sentence") == "This Is A Sentence": ' +
  (capitalize_words("this is a sentence") == "This Is A Sentence").to_s #ここのto_sの意味・・・②
)
puts(
  'capitalize_words("mike bloomfield") == "Mike Bloomfield": ' +
  (capitalize_words("mike bloomfield") == "Mike Bloomfield").to_s
)
実行すると
apitalize_words("this is a sentence") == "This Is A Sentence": true
capitalize_words("mike bloomfield") == "Mike Bloomfield": true
になります。

①、このwords.lengthとは単語数ですよね?つまり"this is a sentence"の場合は"4"なるということです。

②、ここにおけるto_sメソッドのイマイチ役割がわかりません。"puts"の場合、数字の比較ならto_sをつけて文字化するのも理解できますが、もともと文字の場合to_sメソッドをつける意味がよくわかりません。ただ、付けなければエラーが出ました。
p ( "abcd" == "abcd" )
を実行すると"true"と返ってきます。"p"メソッドに変えた場合でもto_sを無くすとエラーが出ます。
このto_sの役割をご教授願います。。。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

① 言い方は色々あると思いますが、合ってます。

② 文字列に対してto_sメソッドを呼んでいるように認識しているようですが、間違いです。
to_sをつけないとエラーになるのは文字列の"+"メソッドが文字列しか受け付けないからで、
capitalize_words("mike bloomfield") == "Mike Bloomfield"
はメソッドの処理結果と予想文字列の比較を行っているのでbooleanのtrue/falseどちらかということになります。
試しに "str" + true とか実行してみてください。同じエラーが確認できるはずです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/10/31 15:54

    回答ありがとうございます!
    とてもわかりやすかったです。ベストアンサーにさせていただきます。

    キャンセル

0

1.
リファレンス読みましょう。
もしくは実験しましょう。
text=("Hello world").split(" ")
puts text.length # => 2
「単語数を返している」と言うよりは「結果的に単語数になっている」です。
文字列をスペース区切りで配列にして、その配列の要素数を数えています。


2.
 'capitalize_words("this is a sentence") == "This Is A Sentence": ' +
  (capitalize_words("this is a sentence") == "This Is A Sentence").to_s 

長ったらしいので要点がわかるように書き直すと

"abcdef"+ (x==y).to_s
となり、
もともと文字の場合to_sメソッドをつける意味がよくわかりません。
とのことですが、そもそも文字列にto_sしていません。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/10/31 15:55

    回答ありがとうございます。
    わかりました!

    キャンセル

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

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

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