タグ

junerのブックマーク (34,628)

  • JavaSctiptの値渡しと参照渡しについて。

    謎の現象。 こんにちは、「ふ」です。 今回はJavaScriptにおける、「値渡し」「参照渡し」について説明します。 いきなりコード。 const a = 1; const b = 1; console.log(a === b) 「「3▶︎ true」」 定数aとbを作り、どちらも値を「1」としました。 そのあとaとbを比較。これは当然「true」ですよね。 const c = [1,2,3]; const d = [1,2,3]; console.log(c === d); 「「3▶︎ false」」 次に定数cとd。値はまったく同じ、1〜3の数値をならべた配列です。 そして2つを比較してみると....何と「false」となってしまいます💧 この謎の現象はなんなのか? それはね。 理由は、定数aやbには値そのものを渡す「値渡し」がされているのに対し、cやdには値への参照を渡す「参照渡し

    JavaSctiptの値渡しと参照渡しについて。
    juner
    juner 2024/12/23
    参照渡しを誤って説明している例
  • 言語が変われば挙動も変わる!参照渡し・値渡しに潜む思わぬ落とし穴|ドドテクノ

    以前、以下の趣旨の記事を投稿したところ、何人かの方々から問い合わせを受けました。 https://dodotechno.com/python-call-by-value/ その際に述べた主旨は、Pythonでは関数に渡されるのは「オブジェクトへの参照」であり、決して「参照渡し」ではない、というものでした。 問い合わせの内容は次のようなものでした。 「”参照の値渡し”は結局、”参照渡し”では?」 「関数内でオブジェクトが変われば、呼び出し元の値が変わるなら、それは参照渡しでは?」 これについて、私の理解では「関数内で「=」を使って変数に別のオブジェクトを代入し、呼び出し元の変数もその新しいオブジェクトで変更される場合」を「参照渡し」と考えています。例えば、VB.NETのByRefやC#のrefキーワード付きの挙動がこれに該当します。 ただ、私が当に伝えたかったのは、言葉の定義そのものではな

    言語が変われば挙動も変わる!参照渡し・値渡しに潜む思わぬ落とし穴|ドドテクノ
    juner
    juner 2024/12/23
    ちゃんと参照渡しの説明ができてる。良い記事
  • 【C#】文字列の最適化手法について - Annulus Games

    今回はC# Advent Calendar 2024の20日目の記事です。テーマは文字列の最適化について。 C#において文字列を表現するstring型はクラスであり、生成のたびにヒープにアロケーションを行うためパフォーマンス低下の要因になりがちです。また、C#のstringの中身は歴史的経緯からUTF-16となっており、UTF-8を直接扱うことができないため、変換の際に余計なオーバーヘッドが発生してしまいます。 そのため、近年の.NETではSpan等を活用して効率的な文字列操作を行うAPIが多数追加されています。また、UTF-8を扱うための機能も色々と用意されています。 そこで今回の記事では、最新の.NET9を用いて文字列操作を最適化する手法を紹介していきます。普段から簡単に使える手法も多いので、是非とも覚えておきましょう。

    【C#】文字列の最適化手法について - Annulus Games
    juner
    juner 2024/12/23
    とてもよいまとめ
  • 【Java】参照渡しとは?参照型の変数を代入した時の挙動を押さえよう!《講義2日目》 | 25歳でフリーランス28歳で起業したエンジニア -じゃけぇ- のあれこれ

    【1日目】値(プリミティブ)型と参照(オブジェクト)型の違いをコードと図で解説 【2日目】参照渡しとは?参照型の変数を代入した時の挙動を押さえよう! 【3日目】==とequalsの違いは図で理解すれば絶対間違えない 【4日目】イミュータブルな変数ってなんだ?String型変数の特殊性を知る 参照周りで押さえておきたい内容について4回に渡って解説していきます。 今日は参照渡しについて。 ブログの熱烈なねつれーつな読者の方(そんな人いるのか)は、以前参照渡しについての記事を書いたのを知っているかもしれません。 それがこちら これは関数に参照型を渡すときの話ですが、今回はもっと手前の代入あたりにフォーカスをしぼっていきます。 この記事を読んだ後に↑の記事も読んで頂くとより理解が深まるかと思います。 それでは2日目いきましょう~(/・ω・)/ 変数の代入 変数の代入とは「ある変数が持っている値を

    【Java】参照渡しとは?参照型の変数を代入した時の挙動を押さえよう!《講義2日目》 | 25歳でフリーランス28歳で起業したエンジニア -じゃけぇ- のあれこれ
    juner
    juner 2024/12/20
    オブジェクトを共有することを参照渡しと呼んでいる記事
  • JavaScriptで変数にオブジェクトを代入したら参照先が同期されてしまう現象について

    JavaScript 2017.09.28 komatsu こんにちは、フロントエンドエンジニアの小松です。 入社以来、JavaScriptを書くことは日常茶飯事ですが、その中で謎現象に出会うたびに何度頭を抱えたことか… そうした経験を記事にすることで同じ場面に遭遇した方々のお役に立てればと思い筆を執りました。 というわけで、今回はJavaScriptで変数にオブジェクトを代入したら参照先が同期されてしまう現象についてご紹介したいと思います! 背景 とあるサービスのフロントエンド開発の中で、既存のオブジェクトを新規の変数に代入して、新たな変数に対して変更処理を行いました。 『いや、そもそもその設計自体どうなの�?』感はありますが、自分の場合はvue.jsで変数に格納したオブジェクトをあちこちで使いまわしていたのです。 そうした中、変数Aを元に作成した変数Bに格納したオブジェクトを変更したら

    JavaScriptで変数にオブジェクトを代入したら参照先が同期されてしまう現象について
    juner
    juner 2024/12/20
    インスタンスを共有することを参照渡しと呼んでいる例
  • 変数の値渡しと参照渡し | GRAYCODE JavaScript

    変数から別の変数に代入するときに「値渡し」になるパターンと「参照渡し」になるパターンの違いについて解説します。 この記事のポイント プリミティブ値は「値渡し」になる オブジェクトは「参照渡し」になる オブジェクトを値渡ししたいときは新しいオブジェクトを代入して参照を解除する 変数から変数へ値を代入したときについて 変数から変数に値を代入したとき、値の複製だけが行われる「値渡し」と、値への参照そのものを代入する「参照渡し」の2種類あります。 JavaScriptには文字列(string)、数値(number)、真偽値(boolean)、null、undefinedの5種類の型に分類できる「プリミティブ値」が用意されています。 プリミティブ値が入った変数であれば、別の変数に値を代入したときは「値渡し」になり、2つの変数は独立した変数として扱うことができます。 以下の例はプリミティブ値をもった変

    変数の値渡しと参照渡し | GRAYCODE JavaScript
    juner
    juner 2024/12/03
    プリミティブは値型 / オブジェクトは 参照型 という誤った前提を元に 値型/参照型 と 値渡し/参照渡し をごっちゃにしている。誤り。
  • Pythonの参照渡しとは?イミュータブルとミュータブルの違いとその活用法

    1. 値渡しと参照渡しの違いPythonにおいて、関数に引数を渡す方法には「値渡し」と「参照渡し」があります。 値渡し:関数に引数として値のコピーを渡す方法で、関数内で引数を変更しても、元の変数には影響を与えません。参照渡し:変数の参照(アドレス)を関数に渡す方法で、関数内での変更が元の変数にも反映されます。Pythonでは、オブジェクトの性質に応じてこの挙動が異なります。Pythonの「参照渡し」は、特にミュータブルなデータ型に適用され、コードの動作に大きな影響を与えるため、正しく理解することが重要です。 2. Pythonにおけるオブジェクトの特性Pythonでは、すべてのデータがオブジェクトとして扱われ、オブジェクトの特性により、イミュータブル(変更不可)かミュータブル(変更可能)のどちらかに分類されます。この特性により、関数に引数として渡されたときの動作が異なります。 イミュータブ

    Pythonの参照渡しとは?イミュータブルとミュータブルの違いとその活用法
    juner
    juner 2024/12/03
    “参照渡し:変数の参照(アドレス)を関数に渡す方法で、関数内での変更が元の変数にも反映されます。” 前文はあっているが、あとは誤り。
  • Pythonの引数は参照渡しだが・・・|Python入門

    公開日:2020-09-21 最終更新日:2020-09-21 第16回.Pythonの引数は参照渡しだが・・・ 関数やメソッドの引数に渡す方法としては、「参照渡し」と「値渡し」があります。 Pythonはすべて参照渡しであり、値渡しを指定する書き方は用意されていません。 では、Pythonの参照渡しとはどういうものか・・・

    Pythonの引数は参照渡しだが・・・|Python入門
    juner
    juner 2024/12/03
    “「参照渡し」とは、変数のid(識別値、アドレス)を渡します。” これは参照の値渡しを参照渡しと誤って覚えている記事
  • 俺のフロントエンド依存管理ポリシー20241120

    ポリシー: この世界では常に最新版を使うという気持ちで生きていく Node.js は枯れるという概念がなく、常に古いことはリスク という認識。LTS も短め(3年) 古いAPIのドキュメントは常に消失する モダンなツールは、モダンな前提を要求する ~2020: CJS/ESM 関連で断絶がある(jestが動かなくなりつつある) ~2019: パフォーマンス意識が低い時代の実装が多い ~2015: Node.js のみでしか動かないものが多い。peerDeps の意識が低い この辺で目視でポチポチする npm: npm-check-updates - npm yarn upgrade-iteractive pnpm upgrade -i サーバーランタイムには安定を、ツールチェインにはパフォーマンスを サーバーランタイム(Node.js) Node 体は Stable LTS か、一つ前の

    俺のフロントエンド依存管理ポリシー20241120
    juner
    juner 2024/11/20
    vitest 既に負債化してるのか……まぁ esm 対応が怪しいのはそうだが。
  • プリミティブ型・オブジェクト型と参照について理解を深めよう【第6回】JavaScriptを学ぶ上でつまずきやすいポイントを理解するための連載 - itstaffing エンジニアスタイル

    JavaScriptが持つ「2つの型」の動作を図で解説します。オブジェクト型では「参照」についても確認していきましょう。イメージすることが難しいトピックですが、理解を深めると、不安なくコードを書くことができます。 今回の学び JavaScriptが持つ型は、2種類 「プリミティブ型」と「オブジェクト型」の動作の特徴 ミスしやすい。関数の引数による動作 【筆者】佐藤正志さん 契約社員、客員研究員、フリーランスなどさまざまな立場で開発現場を経験。フロントエンド、バックエンド開発、チームリードやOJTの育成担当まで幅広くこなしてきた。現在プログラミングトレーニング事業を行うサークルアラウンド株式会社を立ち上げ、経営や現場開発を行いながらOJT経験をもとに後進の育成に励み、個人や法人に向けたプログラミングのトレーニングを行っている。ノウハウのコンテンツ化にも取り組んでおり、著書に『ステップアップJ

    プリミティブ型・オブジェクト型と参照について理解を深めよう【第6回】JavaScriptを学ぶ上でつまずきやすいポイントを理解するための連載 - itstaffing エンジニアスタイル
    juner
    juner 2024/11/05
    プリミティブは編集操作で新しい実態を作成する というよりも破壊的操作を行うメソッドを持たないが正しそう。
  • JavaScriptのconstは値を変更できないわけではない - いづいづブログ

    JavaScriptの勉強会に参加しようしようと思っていながら、3回目までは所用とモチベーションあがらず問題で参加できず。 4回目から参加することにしました。 ということで参加できなかった回の復習をしていたら、こんな例文が。 const obj = {name: 'Taro', age: 10} obj['name'] = 'Jiro' // nameを書き換え console.log(obj) // 出力結果 {name: "Jiro", age: 10} あれ、定数なのに変更できるの? constとは まずはJavaScriptのconstを正確に理解しましょう。 このサイトがとてもわかりやすいので、ほとんどここで理解しました。 developer.mozilla.org const 宣言は、値への読み取り専用の参照を作ります。 その値が不変ということではなく、その変数識別子が再代入で

    JavaScriptのconstは値を変更できないわけではない - いづいづブログ
    juner
    juner 2024/11/01
    “constは再代入や再宣言はできませんが、値が上書きできないわけではない” と書いているが、そで言っている値は参照値であってオブジェクトの状態ではないのに注意。(多分値の概念が筆者の中であいまいになってる
  • What is Variable Shadowing in JavaScript?

    juner
    juner 2024/10/30
    var に関しては関数の先頭に宣言した扱いになるから ブロックスコープと被ってエラーになるからやろな……。
  • JavaScriptの window と self と globalThis の話(その1) - blog.takemaro.com

    昨日の仕様書の話の続きというか実例です。 まえおき JavaScriptには window というオブジェクト(変数)があり、グローバル変数は window のプロパティとしてもアクセスできる、ということはある程度触ったことのある方ならご存知のことであろう。具体的には、たとえばアドレスバーのURLを操作するために使われる history.replaceState() は window.history.replaceState() と書いても同じ意味になる。 window 自体もグローバル変数なので、 window.window.window.history.replaceState() と書いても動く(もちろんこんな書き方をすべきではないが)。 JavaScript関連の仕様書は相当精緻に作られている方である。Webというプラットフォームで使われるので、処理系はブラウザであり、複数の実装(

    juner
    juner 2024/10/29
  • Pythonの引数における参照渡しと値渡しについて

    値渡しとは関数を呼び出す時に仮引数に指定した値をコピーして実引数に渡す方式です。 同じ値を保管しますが、保管している場所がそれぞれ独立しているので、関数内で実引数が格納された変数の値が変更されても、呼び出し元の変数の値には影響がでません。 参照渡しとは関数を呼び出す時に仮引数に指定した値が保管されている場所の情報を実引数に渡す方式です。 同じ場所に保管されている値を関数側の変数と呼び出し元の変数が参照しているので、関数内で変数の値を変更すると呼び出し元の変数が参照している値も変更されます。 このように値渡しと参照渡しでは関数内で値が変更された場合の挙動が異なりますので、どちらの方式が使わているのか知っておくことは重要です。 Pythonにおける引数の参照渡しの仕組み Python では関数を呼び出す時に引数を指定すると参照渡しが使用されます。ただ、 Python の場合文字列や数値などのよ

    Pythonの引数における参照渡しと値渡しについて
    juner
    juner 2024/10/28
    インスタンスを渡すことを参照渡しと呼んでいる誤った例。参照渡しでもイミュータブルだから反映されないのではなくて値渡しだと代入が反映されないからですね。
  • 参照型編

    変数と型についてプログラムは「データ」と「命令」の集まりです。プログラムでデータを扱うときに使うのが「変数」ですね。変数はよく「データを入れる箱」と表現されますが、もう少し正確にいうと変数は「メモリ上のある領域」を指しています。その領域のアドレスを抽象化しているのが変数名ということです。 データは変数に格納します。その際にデータの大きさが決まらないと変数の大きさも決められません。我々の日常で例えると、物を持ち運ぶときに鞄を使いますね。「物」が「データ」、「鞄」が「変数」に相当します。どの鞄を持っていくかは中に入れる物によって決めると思います。コンピュータでも同じようにデータを入れるためにはデータが十分入る箱(変数)を用意する必要があります。その大きさを決めるのが「型」になります。実は型の役割は「大きさを決める」だけでなく、「振る舞いを決める」というもっと重要な役割も持っているのですが、ここ

    参照型編
    juner
    juner 2024/10/28
    インスタンスを渡すことを参照渡しと呼んでいる誤った例
  • U - 2.04.参照

    juner
    juner 2024/10/28
    参照渡し!
  • Pythonの引数の渡し方について解説(値渡し・参照渡し) – 本町オープンソースラボ -大阪でのIT勉強会多数開催!大阪本町のエンジニア向けコミュニティ-

    「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです! UdemyPythonおすすめ33講座レビューリスト メモリやアドレスの基礎知識 「メモリ」とは、コンピュータ上で数値などを記憶しておくための領域のことです。また、メモリのどの位置にデータを記憶しておくかを示す番地のことを、「メモリアドレス」といいます。 上記の図のように、メモリには、変数と対応した番地(アドレス)が振り分けられており、メモリの各区画には、数値や文字列といった実データが記憶されています。 「値渡し」と「参照渡し」 関数に引数を与えて呼び出すことを考えます。コードで示すと、以下のような例になります。 def func(b): # 処理 a = 10 func(a) 関数

    juner
    juner 2024/10/28
    参照渡しができないことを丁寧に説明している。よき。
  • Java に参照渡しは存在しない。値渡しだけが存在する。 - よしたろうブログ

    初めに Javaにおける参照型 それぞれの「渡し」の定義について Java の評価戦略 プリミティブ型の「値渡し」の例 参照型(配列)における「参照渡し」に見える「値渡し」 Java が参照渡しをサポートしていない事を示す例 Java には参照渡しがないことのまとめ 終わりに 初めに 参照渡しができるという記事や解説がよく見られますが、Java には「参照渡し」はありません。確かに配列やオブジェクトなどの参照型の変数を扱う場合、参照渡しの様に二つの変数間で同じインスタンスを共有している動きが見られます。いわゆる、別名参照問題です。 プリミティブ型変数には、プリミティブ型の値そのものが格納され、代入などの操作を行うと、値がコピーされ、結果的に別々の値になります。これに対して、参照型変数に格納されるのは参照値なので、代入操作を行うとオブジェクト自身がコピーされるわけではなく、参照値(ポインタ)

    Java に参照渡しは存在しない。値渡しだけが存在する。 - よしたろうブログ
    juner
    juner 2024/10/28
  • 【Python】Python に参照渡しは存在しない話|CREFIL

    はじめにこんにちは。CREFIL の Manager の廣澤です。 私が今 JOIN している案件で初めて Python を触っているのですが、学習中にネット上の誤情報に騙されてしまったことがありました。 少しでも正しい情報を増やしたいと思い、その内容を記事にしようと思います。 Python はミュータブルかどうかで値渡しか参照渡しが変わる?どうもネット上の記事を眺めていると、見出しに書いたような勘違いが広まっているようです。 どういう主張かと言えば、以下のように主張しているのです。 関数の引数に渡すのがイミュータブルな型(intなど)であれば、呼び出し元の変数は影響を受けない(値渡し) 関数の引数に渡すのがミュータブルな型(リストなど)であれば、呼び出し元の変数は影響を受ける(参照渡し) これは部分的には正しいのですが、そもそも参照渡しを勘違いしていることによる誤りです。 Python

    【Python】Python に参照渡しは存在しない話|CREFIL
    juner
    juner 2024/10/28
    わかりやすい Python に参照渡しは無いという話
  • JavaScriptオブジェクトで参照渡し防止にはObject.create()を使用する

    参照渡しとは 変数に代入が行われる際に値をそのまま渡すのではなく、参照先を渡すような仕様。 実際にコードを見て実行したほうが理解しやすい。 JavaScriptconst person = { name: 'Sato' } const me = person me.name = 'Yamada' console.log(person.name) // => 'Yamada' console.log(me.name) // => 'Yamada' console.log(person.name) // => 'Yamada' 上記のコードのconsole.logの結果はすべて 'Yamada' になる。 const me = person という記述だとmeにpersonを代入する際に参照先を渡しているのでme.name = 'Yamada' にすると personのnameも 'Yamad

    JavaScriptオブジェクトで参照渡し防止にはObject.create()を使用する
    juner
    juner 2024/10/18
    Object.create() を インスタンスのコピー目的で使うと、それを継承元として使った様な挙動になるので Object.entries() の対象外になるし、弊害しかないのでは…… Object.create() は null しか入れるべきではないまである。