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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

3回答

1007閲覧

【Ruby】結合度という単語の意味について

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2019/08/09 05:52

質問

Ruby学習中の初心者です。
結合度という単語の意味について知りたいです。
プログラミングにおける結合度という単語について説明頂けないでしょうか。

ソースコード

a.delete 100{'NG'}

こちらは{}の結合度が強いため、100{'NG'}と判断されるそうなのですが、
結合度という意味が理解できずつまづきました。

結合度が弱いと式において最初に評価されてしまう、というようなイメージをもって
いるのですがあってますでしょうか。

ご回答のほど、宜しくお願いします。

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

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

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

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

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

asm

2019/08/09 06:08

「結合度」という単語が出てる文書の具体例をお願いします。 るりまサーチにて検索したところ、「結合強度」が2回登場するのみです。
退会済みユーザー

退会済みユーザー

2019/08/09 13:45

プロを目指す人のためのRuby入門 という本に上記のコードが書いてあり、エラーとなる理由として 「{}の結合度が強いため、a.delete 100ではなく、100 {'NG'}と解釈されてしまうためです」 と書かれておりました。
guest

回答3

0

ベストアンサー

この文脈での「結合度」は、正式な術語ではありません。「式において最初に評価されてしまう、というようなイメージ」を表現した、曖昧な言葉です。

投稿2019/08/09 05:55

maisumakun

総合スコア145183

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

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

maisumakun

2019/08/09 05:59

「プログラミングにおける結合度という単語」としては、「モジュール同士の依存度合い」という意味合いで使われることのほうが多いです。
退会済みユーザー

退会済みユーザー

2019/08/09 13:53

回答ありがとうございます。 結合度という単語にモヤモヤしていたのですが、回答を読み納得しました。
guest

0

1 + 2 * 3と書いたときに、かけ算が先に実行されるようなものです。

他の言語だと、メソッドや関数呼び出しの括弧が省略できないので、こういう間違いは起こらないのですが、Rubyの場合は省略できるので、
・メソッドと( )を省略した引数の結びつき
・メソッドと{ }で書いたブロックの結びつき
のうち、後者が強いため、この例だと100deleteより{'NG'}と先に結びつこうとして、100がメソッドで無いため{ }と結びつくことが出来ず、エラーになります。

ただ、この意味で「結合度」という単語を使うことはまず無いと思います。
リファレンスだと、「強く結合します」となっていますね。

プログラミングにおける「結合度」の意味については、maisumakunさんの回答コメントにある通り。

投稿2019/08/09 09:46

編集2019/08/09 23:14
otn

総合スコア84499

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

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

0

この文脈においては、評価される順番や所謂「演算子の優先順位」とは別の概念です。

ruby

1%i[a b c].each_with_object [3,5].sum do |a| 2 p a 3end 4 5puts "---------------" 6 7%i[a b c].each_with_object [3,5].sum {|a| 8 p a 9}

この結果表示されるものが上下で違います。

Rubyのメソッド呼び出し時の()が省略可能なことでうまれる曖昧さによって
メソッド メソッド ブロックという記述ではメソッド(メソッド) ブロックメソッド(メソッド ブロック)という2種類の解釈ができます。

この曖昧さを解消するために、{}によるブロック付きメソッド呼び出しは直前の識別子にくっつき(結合し)
do endの場合は外側のメソッド呼び出しにくっつく(結合する)事に定めています。

この様子を通常「{}の方が結合が強い」等と表現しています。

「結合度」というと別の用語になるので、おそらくミスでしょう。

投稿2019/08/09 15:28

編集2019/08/09 15:29
asm

総合スコア15147

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問