Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

data-type: プリミティブと参照型についてを追加する #145

Closed
azu opened this issue Sep 29, 2016 · 13 comments
Closed

data-type: プリミティブと参照型についてを追加する #145

azu opened this issue Sep 29, 2016 · 13 comments

Comments

@azu
Copy link
Collaborator

azu commented Sep 29, 2016

https://asciidwango.github.io/js-primer/basic/data-type/
プリミティブとオブジェクトで分けているけど、参照についてもここで触れる。
プリミティブ系は参照ではないということ、オブジェクト系は参照であるということについてを書く感じ。
具体的に意識しないと行けない例は #49 Arrayとか別の所になるはず。

#137 (comment)

@azu
Copy link
Collaborator Author

azu commented Nov 3, 2016

  • 基本型
  • プリミティブなデータ型
  • プリミティブ型

どっちかに統一した方が良さそう

@azu
Copy link
Collaborator Author

azu commented Nov 4, 2016

仕様的には、Primitive valueとObject valueという分類な感じがする。
参照型と言ったほうが分かりやすい気がするので、他の文書がどういう表現にしてるかを調べてみる。

===

Return true if x and y are the same Object value. Otherwise, return false.
http://www.ecma-international.org/ecma-262/7.0/#sec-samevaluenonnumber

という書き方だったりして、参照先が一致というよりは、Object valueが等しいか という読み方になりそう。

@azu
Copy link
Collaborator Author

azu commented Nov 4, 2016

パーフェクトJavaScript:

わかりやすさを考えて 基本型参照型 、 変数と参照の話を合わせて表現してる

パーフェクトJavaScript
mu pdf viewer 2016-11-04 16-17-36

@azu
Copy link
Collaborator Author

azu commented Nov 4, 2016

JavaScript本格入門(第一版):

こちらはもっと分かりやすさに重きを置いて、データ型の分類として基本型参照型にしてる。
data-type
zu

@azu
Copy link
Collaborator Author

azu commented Nov 4, 2016

JavaScript Good Parts:

JavaScriptには、単純な変数型として、数値、文字列、真偽値、null、undefinedがある。
それ以外の値はオブジェクトである。数値、文字列、真偽値はメソッドを呼びだすことができる、という意味ではオブジェクトに似ている。
しかしこれらの値はイミュータブルである。

+ "オブジェクトは参照渡しが行われる"
(参照の値渡しじゃなくて、_Objects are passed around by reference_になってる)

関連:

@azu
Copy link
Collaborator Author

azu commented Nov 4, 2016

JavaScript(サイ本):

それぞれのデータ型ごとに操作方法が違うよという話を説明とコードで頑張って書いてる感じ

最終的にこういうまとめかた

コピーする 渡す 比較する
数値 値による 値による 値による
論理値 値による 値による 値による
文字列 不変 不変 値による
オブジェクト 参照による 参照による 参照による

@azu
Copy link
Collaborator Author

azu commented Nov 4, 2016

値と変数 ES2015+は分けないと駄目だ。
constの話があるので、それでいて値にはimmutableとそうでないもの(object)があるというのが分かりやすい感じになりそう。

@azu
Copy link
Collaborator Author

azu commented Nov 4, 2016

Learning JavaScript(3rd):

Primitive dataはimmutableである。
mu pdf viewer 2016-11-04 16-57-38
Objectは複数のpritimiveとかからなる複合型
mu pdf viewer 2016-11-04 17-03-57

結構先に注意書きでObjectはReference typeだよと書いてあるぐらい。
mu pdf viewer 2016-11-04 17-05-37

@azu
Copy link
Collaborator Author

azu commented Nov 4, 2016

Speaking JavaScript:

Primitive Values Versus Objects
-- http://speakingjs.com/es5/ch01.html#basic_prim_vs_obj

Speaking JavaScriptは

  • 比較 by value or reference
  • 値 は Immutable or mutable

Explorer JS

@azu
Copy link
Collaborator Author

azu commented Nov 4, 2016

このプリミティブ型と参照型の問題は幅広い話になってしまいそう。

この data-type では データ型 の特性自体について紹介するので、
プリミティブ型とオブジェクト(参照型)という違いがあるということについてだけ述べる感じ。
データとしてはImmutableかそうでないかという特性があるという話で、
そのデータの操作方法としては別の話になるはず。

具体的な操作としては以下のものがある。

  • 値の受け渡し function
  • コピー = (特にこれはオブジェクト側に統一した方法がないという問題がある)
  • 比較 === (でも軽くは触れてるけど…)

についてはそれぞれのString #121 や Array #49 といった章でやるのがいいかもしれない。

コピー自体はStringの特性の話だけど、関数への"受け渡し"においてこのコピーという特性を理解することが、メンテンス性の高いコードに繋がるという話を含めていきたい。(関数でオブジェクトを破壊的な変更するな!とか具体的になる気がする)

azu added a commit that referenced this issue Nov 4, 2016
* refactor(data-type): プリミティブ型の表記を統一

refs #145

* chore(prh): コメントを修正
azu added a commit that referenced this issue Nov 4, 2016
プリミティブ型とオブジェクトという分類について。
プリミティブ型はイミュータブル(immutable)であるということ。
一方、オブジェクトはミュータブル(mutable)であるということ。

また、オブジェクトは参照型と呼ばれることがあるという点についてを追加

refs #145
azu added a commit that referenced this issue Nov 5, 2016
* feat(data-type): データ型についての補足を追加

プリミティブ型とオブジェクトという分類について。
プリミティブ型はイミュータブル(immutable)であるということ。
一方、オブジェクトはミュータブル(mutable)であるということ。

また、オブジェクトは参照型と呼ばれることがあるという点についてを追加

refs #145

* refactor(data-type): 変数の型と値の型という対比に変更

* chore(data-type): 繰り返し表現を削除

* refactor(data-type): 大きな分類 -> 詳細な分類という流れに変更

* chore(data-type): 表記の統一

* chore(data-type): Symbolの説明を変更
@azu azu mentioned this issue Nov 8, 2016
10 tasks
@azu
Copy link
Collaborator Author

azu commented Nov 12, 2016

=== についてはいろんな具体例を出したほうが親切なのかもなー
一応オブジェクトというくくりで話をしているけど(具体的に関数はどうなのかみたいな話はしてない)

関数同士を比較することできたんですね
--- javascript - removeEventListenerで削除するlistenerを識別する内部的な仕組み - スタック・オーバーフロー

@azu
Copy link
Collaborator Author

azu commented Oct 29, 2018

@azu
Copy link
Collaborator Author

azu commented Apr 8, 2020

一応書いてはあるので

@azu azu closed this as completed Apr 8, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant