並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 40 件 / 316件

新着順 人気順

イテレータの検索結果1 - 40 件 / 316件

  • コードをまとめる技術としてのイテレータとジェネレータ - Qiita

    ジェネレータが5.5から入ったことで完全に空気と化した(?)PHPのイテレータを、ちょっと違う面からまとめたいと思います。 コードをまとめるということ Don't Repeat Yourself(DRY)という言葉があります。達人プログラマーという本に出てくる言葉です。 信頼性の高いソフトウェアを開発して、開発そのものを簡単に理解したりメンテナンスできるようにする唯一の方法は、DRY原則に従うことです。 「すべての知識はシステム内において、単一、かつ明確な、そして信頼できる表現になっていなければならない。」 (p. 27) 端的に言えば「同じことを二度書いてはいけない」ということですね。この原則を当てはめなくてもいい例外のパターンもいくつかあるのですが。。 コードにおいて「同じことを二度書いてはいけない」を忠実に守ろうとすると、同じコードを何度も書きたくなったら、何らかの方法でそのコードを

      コードをまとめる技術としてのイテレータとジェネレータ - Qiita
    • 見直されるべきPHP5の組み込みイテレータ - hnwの日記

      PHPには5.0.0以降SPL (Standard PHP Libray)という枠組みが導入されています。これにより、Iteratorインターフェースを実装したクラスのインスタンスであれば、foreach文で配列と同じように取り扱えます。自分でクラスを作るときもIteratorを実装すれば使うのが楽ですし、コードも読みやすくなると思います。 また、PHPに標準で組み込まれているクラスにはIteratorを実装しているものが多数あります。たとえば僕の手元のPHP5.2.9には24個のイテレータがあり、そのうちいくつかは十分に実用的なクラスです。ただ、日本語の資料が少ないせいか、かなり知名度は低いように思います。本記事では4つの便利な組み込みイテレータを紹介します。 SPLのクラスにはデザインパターンの考えが多く含まれています。特に、イテレータを元にイテレータを作るような使い方は、保守性の高い

        見直されるべきPHP5の組み込みイテレータ - hnwの日記
      • Python: ジェネレータをイテレータから理解する - CUBE SUGAR CONTAINER

        Python のイテレータとジェネレータという概念は意外と分かりにくい。 今回は、実は深い関わり合いを持った両者についてまとめてみることにする。 というのも、最終的にジェネレータを理解するにはイテレータへの理解が欠かせないためだ。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.12.6 BuildVersion: 16G1036 $ python --version Python 3.6.3 イテレータとは まず、そもそもイテレータとは何者だろうか。 それについて、いくつかの側面から考えてみることにしよう。 使い方から考える 最初は、使い方という側面からイテレータとは何かを考えてみよう。 このとき、答えは「要素を一つずつ取り出すことのできるオブジェクト」になる。 実際に、使い方からイテレータについて見ていこう。

          Python: ジェネレータをイテレータから理解する - CUBE SUGAR CONTAINER
        • PHPのジェネレータはイテレータより速い - hnwの日記

          先日の記事「PHPのジェネレータの実装を調べてみた」で僕は次のように書きました。 GeneratorクラスはIteratorインターフェースを実装しており、対応するPHPメソッドを持っています。また、Cで実装した場合のみ指定できるイテレータ関数も実装しています。このように両方が指定されている場合、foreachループではCの関数が呼ばれ、イテレータメソッドを明示的に指定した場合はPHPメソッドの方が呼ばれます。 ところで、イテレータに対応するPHPメソッドとC関数となぜ2つとも実装する必要があるのでしょうか。実は、PHPメソッドの方だけ実装すれば正常に動作します。C関数を実装する理由は速度面のメリットからだというのが僕の理解です。C関数は関数ポインタで単に呼び出せるのに対し、PHPメソッドの呼び出しは命令実行器の状態保存・復元の必要があるなど、呼び出しのコストがやや高いのです。 PHPのジ

            PHPのジェネレータはイテレータより速い - hnwの日記
          • JavaScript の イテレータ を極める! - Qiita

            ECMAScript 6(2015年6月に公開され、今もなお比較的新しい JavaScript)の大目玉である イテレータ と ジェネレータ。なかなかに複雑で巨大な仕組みになっていてややこしいです。 そこで今回は イテレータ を、順を追って理解できるように解説したいと思います。 Qiita: JavaScript の イテレータ を極める!(この記事) Qiita: JavaScript の ジェネレータ を極める! また、実用的なサンプルを「3. 実用サンプル」に示しました。 初めにこちらを見て、何ができるのかを知ってから読み始めるのもオススメです。 (2017年3月現在、オープンなページでの使用はまだ避けたほうがいいかもしれませんが、実装は確実に進んでいます。ECMAScript 6 compatibility table) 1. ことばの定義 1.1. イテレータ (Iterator

              JavaScript の イテレータ を極める! - Qiita
            • Pythonのイテレータとジェネレータ - Qiita

              Pythonのイテレータ(iterator)とジェネレータ(generator)についてまとめてみます。 (追記2018.12.25: Python3の文法に全面的に置き換えました) イテレータ: 要素を反復して取り出すことのできるインタフェース ジェネレータ: イテレータの一種であり、1要素を取り出そうとする度に処理を行い、要素をジェネレートするタイプのもの。Pythonではyield文を使った実装を指すことが多いと思われる Python組み込みのコレクション(list, tuple, set, dictなど)はどれもイテレーション可能ですが、組み込みのコレクションを使った繰り返し処理ではあらかじめコレクションに値を入れておく必要があるため、以下のようなケースではイテレータやジェネレータを自分で実装したいというケースがあると思います。 無限に繰り返すイテレーション 要素すべてをあらかじめ

                Pythonのイテレータとジェネレータ - Qiita
              • イテレータを介して見るPHPクラスの内部構造 - hnwの日記

                PHPにはイテレータの仕組みがあります。イテレータクラスのインスタンスは、配列同様にforeach文でループを作ることができます。たとえば次の例を見てみましょう。 <?php $iter = new SplQueue(); $iter[] = 1; $iter[] = 2; $iter[] = 3; $sum = 0; foreach ($iter as $v) { $sum += $v; } var_dump($sum); // int(6) SplQueueというのはキューを実現するイテレータで、ArrayAccessも実装しているので配列のように要素を追加することができます。この場合、3つの要素を持っているのでイテレーションも3回になります。 SplQueueによるイテレーションをネストしてみる ところで、同じイテレータをネストした場合どうなるでしょうか?次のようなコードを考えてみま

                  イテレータを介して見るPHPクラスの内部構造 - hnwの日記
                • Ruby のイテレータ - yield の働き | すぐに忘れる脳みそのためのメモ

                  1. 要素を取り出す each メソッド Ruby の「イテレータ」は、複数の要素を持つオブジェクトが、個々の要素を取り出し、何らかの処理を適用するときに使うと便利。 一番基本となるメソッドが each 。例えば、Array クラスの場合、each メソッドで、要素をひとつづづ取り出すことができる。 [1,2,3,4,5].each do |i| puts i end これはどういう仕組みで、このように書けるのだろうか? 2. イテレータの役割 「オブジェクト指向スクリプト言語 Ruby」(p94) では、イテレータについて、次のように述べられている。 イテレータ (Iterator) はメソッドの一種で、もともとは繰り返しの抽象化のためのものでした。 しかし、はじめから 「繰り返しの抽象化のため」 という視点で、イテレータを理解しようとすると、わかりずらい。「繰り返しの処理のため」にある

                    Ruby のイテレータ - yield の働き | すぐに忘れる脳みそのためのメモ
                  • イテレータ - Wikipedia

                    この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方) 出典検索?: "イテレータ" – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL(2017年9月) イテレータ(英語: iterator)とは、プログラミング言語において配列やそれに類似する集合的データ構造(コレクションあるいはコンテナ)の各要素に対する繰り返し処理の抽象化である。実際のプログラミング言語では、オブジェクトまたは文法などとして現れる。JISでは反復子(はんぷくし)と翻訳されている[1][2]。 ジェネレータ (プログラミング) の記事も参照のこと。 種類[編集]

                    • C++マニアック,STL の使い方,how to use STL,標準テンプレートライブラリ,standard template library,コンテナ、container,イテレータ,iterator,アルゴリズム,algorithm

                      C++マニアック STL の使い方,how to use STL,標準テンプレートライブラリ,standard template library,コンテナ,container,イテレータ,iterator,アルゴリズム,algorithm ページの末尾へ トップページへ

                      • Go1.23で導入予定のイテレータを完全理解する✌️

                        イテレータについて完全理解するぞ!!!! 皆さん、Go1.23で導入予定のイテレータすごい楽しみですよね? 筆者はすごい楽しみです。Go1.18でジェネリクスが導入されて書き方の幅が広がったように、今回のイテレータもGoの書き方の幅を広げる機能になるのではと予想しております! https://github.com/golang/go/issues/61405 を見ると分かるように「add range over int, range over func」の機能はGo1.23のマイルストーンに積まれています。 「range over int」の機能についてはGo1.22で既に実装されています[1] 。「range over func」は来たるGo1.23に実装予定だと思われます。このブログでは、導入予定の型/関数とその使い方を深ぼっていきたいと思います! このブログの中では「range ove

                          Go1.23で導入予定のイテレータを完全理解する✌️
                        • JavaScriptのイテレータが持つメソッドをそろそろ知っておきたい人が読む記事 - Qiita

                          イテレータは今となっては多くのプログラミング言語に存在する概念で、繰り返し処理やループ、ストリームといった対象を抽象化してくれるものです。JavaScriptにはES2015でイテレータが追加されており、JavaScriptを触っている方にとっては既に馴染み深いものとなっています。 とはいえ、JavaScriptのイテレータにはひとつ問題点がありました。それは「イテレータを直接変換・操作できるメソッドが存在しない」という点です。従来イテレータが持つメソッドはイテレータから一つ値を取り出すnextメソッドのみであり1、それ以上の機能は何も提供されていませんでした。これにより、Rustなどのイテレータが強い言語に比べてJavaScriptのイテレータは有用性が大幅に低いものとなっていました。 この記事では、この問題を多少解消するプロポーザル「Iterator Helpers」を紹介します。これ

                            JavaScriptのイテレータが持つメソッドをそろそろ知っておきたい人が読む記事 - Qiita
                          • イテレータについて - JS.next

                            概要 V8でES2015のイテレーション周りの実装が進んできたので、解説してみようと思う。 イテレーションとは ここではデータの要素を繰り返して取り出すこと。 例えば配列のforEachメソッドは、要素やインデックスをイテレートするイテレータである。 ただしこれらは(内部的に)繰り返しまで行うイテレータ(内部イテレータ)だが、ES2015では外部イテレーションのための仕組みが入った。 イテレータオブジェクト イテレータオブジェクトは『次の要素』を返すメソッドを備えているオブジェクトである。 つまりイテレーションの『次の要素を取り出す』ことだけを担い、それを繰り返すことは外で行われる(外部イテレータ)。 例 Array.prototype.values()は配列の要素を順番に列挙するイテレータオブジェクトを返す。 var ary = [5, 4, 3] var iter = ary.valu

                              イテレータについて - JS.next
                            • イテレーターとジェネレーター - JavaScript | MDN

                              « 前のページ 次のページ » コレクション内の各アイテムに対する処理は非常に一般的な操作です。JavaScript では簡単な for ループから map()、filter() にいたるまで、コレクションに対する反復処理の複数の方法を提供します。 イテレーターとジェネレーターは、コア言語の内部に反復処理が直接的に取り入れられており、for...of ループの動作を簡単にカスタマイズできる仕組みをもたらします。 詳細についてはこちらもご覧ください: Iteration protocols for...of function* と ジェネレーター yield と yield* JavaScript では、イテレーターはシーケンスおよび潜在的には終了時の戻り値を定義するオブジェクトです。 より具体的に言うと、イテレーターは、次の 2 つのプロパティを持つオブジェクトを返す next() メソッ

                                イテレーターとジェネレーター - JavaScript | MDN
                              • Python でファイルを直接イテレータとして使うのが適切でない場合 - methaneのブログ

                                Pythonでサブプロセスと対話する - 西尾泰和のはてなダイアリー Python のファイルは、通常のファイルの読み込みの効率を考えて大きめ(8192バイト)のバッファリングを行っているので、ソケット通信やパイプで問題になるケースがある。 問題になるケースの一つがファイルオブジェクトをイテレータとして使って行単位の処理をする場合で、 for line in fileobj: do_something(line) のようなコードを書くと、実際には fileobj の中にあるCのFILEから一気に読み込み、その中から改行文字を探して切り出していくので、8192バイト読み出せるかファイルの終端に到達するまでブロックしてしまう。 一方、 file.readline() は、改行を見つけるまで getc() を繰り返すか、(UnixでUniversal Newlineを使わない場合は)fgets

                                  Python でファイルを直接イテレータとして使うのが適切でない場合 - methaneのブログ
                                • RubyのRangeクラスと範囲オブジェクト、範囲演算子、イテレーターの使い方

                                  RubyのRangeクラスと範囲オブジェクト、範囲演算子、イテレーターの使い方:若手エンジニア/初心者のためのRuby 2.1入門(4)(3/3 ページ) Rubyのイテレーターの基本的な使い方 ArrayやHashなどのコンテナーやRangeといった範囲オブジェクトを使っていると、含まれている要素1つ1つに対して、何らかの処理を行いたい場合があります。このようなコンテナーの各要素に対する繰り返しの処理を、概念的に「イテレーター」と呼びます。 少し込み入った話をすると、ArrayやHashは「Enumerable」というモジュールをミックスインすることによってイテレーターを実現する種々のメソッドを実装しています。ミックスインについては、以降の連載のクラスやモジュールを解説する回で説明します。 基本的な繰り返し(eachメソッド) ArrayオブジェクトにおいてもHashオブジェクトにおいて

                                    RubyのRangeクラスと範囲オブジェクト、範囲演算子、イテレーターの使い方
                                  • イテレーター - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

                                    概要 C# の foreach 構文は、コレクションクラスの利用者側から見ると非常に便利な機能です。 しかしながら、実装側から見た場合、IEnumerableやIEnumeratorインターフェースを実装する必要があり、結構面倒な作業が必要でした。 この実装側の労力を軽減するために、C# 2.0ではイテレーター構文というものが追加されました。 ポイント イテレーター構文: IEnumerator を簡単に実装するための機能。 return の代わりに yield return イテレーター ブロック メソッドやプロパティのgetアクセサーなどを定義する際、ブロック中にreturnの代わりにyield returnもしくはyield breakを書くことで、通常のメソッドやプロパティとは違った動作が得られます。この、yield returnもしくはyield breakを含むブロックのことを

                                      イテレーター - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
                                    • 極めるイテレータ

                                      $Id: iterator.rd,v 1.5 2003/06/18 23:28:28 aamine Exp $ Ruby の最大の特徴であり難関でもあるイテレータを極めちゃうぜ講座。 イテレータとはなにか 最初に言っておくと、最近の Ruby 界では「イテレータ」という名称はあんま し好まれてない。くりかえさないイテレータが増えてきたっていうのが理由だ。 ではなんと呼べばいいのかっていうと、「ブロック付きメソッド」とか言うらしい。 どうも好きじゃないなあこの名称。 じゃあどんな名称だったらいいのか。 原点に立ち戻ってイテレータとはなにかと考えると、「制御構造を作るメソッ ド」なのだ。それは以下のような例を見れば感覚的に「あー、そうなのか」と わかる。 def IF( cond ) yield if cond end IF (i > 4) { puts 'ok' } そんなわけで、原理を考え

                                      • Go1.22で登場するかも!?開発中の新機能イテレータを使ってみる!

                                        導入 Go1.21が先日リリースされ、スライスとマップに関する汎用的な処理を扱う標準パッケージ (slicesとmaps) が導入されましたが、 直前になって入る予定の maps.Keys が削除されてしまいました。 これはイテレータが実装予定のため maps.Keys 等はイテレータの実装を待ってからの方が良いと判断されたためだと思われます。 Go1.22で実装予定のイテレータとはどういう機能なのか、イテレータにすることで何が嬉しいのかがよく分からなかったので調べてみました。 この記事で知れること Goでのイテレータの実装がどのようになるのか (2023/08/30現在の実装) イテレータのメリット 事前準備 gotip は開発中のGoのコードを扱うことができるCLIツールで、以下のコマンドでインストールすることができます 2つ目のコマンドの末尾の数字 (510541) はGoのチームが

                                          Go1.22で登場するかも!?開発中の新機能イテレータを使ってみる!
                                        • 外部イテレータと内部イテレータ - kaisehのブログ

                                          Javaでコレクションクラスを作ってそのイテレータを実装する場合、Javaにはクロージャが無いので、外部イテレータを使うことがほとんどだと思います。 例えばint値のコレクションとイテレータを自作するときは、まず以下のようにIntIteratorとIntIterableを用意して public interface IntIterator { boolean hasNext(); int next(); } public interface IntIterable { IntIterator iterator(); } 以下のように実装します。 public class IntArray implements IntIterable { private int[] array; private int length; public IntArray(int[] array) { this.a

                                            外部イテレータと内部イテレータ - kaisehのブログ
                                          • B::Foreach::Iteratorでforeachイテレータを進める - Islands in the byte stream (legacy)

                                            B::Foreach::Iteratorというモジュールを書いた*1。 use B::Foreach::Iterator 0.02; foreach my $key(foo => 10, bar => 20, baz => 30){ printf "%s => %s\n", $key => iter->next; } iter->next()*2はforeachループのイテレータをひとつ進め、その値を返す。 また、iter->peek()はイテレータを進めることなく、次のイテレータを返す。 このモジュールを実装するにあたってpp_hot.cのpp_iter()を読んだのだが、確かにforeach ($min .. $max)は内部で配列を生成していない。また、foreach (reverse ...)についても最適化が行われており、reverse()した一時配列を作るのではなく、イテレータ

                                              B::Foreach::Iteratorでforeachイテレータを進める - Islands in the byte stream (legacy)
                                            • PHP5.5のジェネレータをSPLのイテレータと組み合わせてみる - hnwの日記

                                              リリースが間近になったPHP5.5ではジェネレータが導入される予定です。これはイテレータを簡単に記述する文法を導入するもので、Pythonのジェネレータに非常に良く似ています。 もう少し詳しく説明しましょう。PHP5.5では、yieldというキーワードが導入されました。これはジェネレータで値を受け渡すための構文です。このyieldを含む関数はジェネレータ関数と呼ばれます。関数がジェネレータ関数かどうかは、PHPの解釈のタイミングで自動的に判断されます。 ジェネレータ関数が呼ばれると、ジェネレータ関数に対応するジェネレータオブジェクトが返されます。関数呼び出しの時点ではジェネレータ関数の中身は1行も実行されません。ジェネレータオブジェクトから値を取り出すタイミングで初めてジェネレータ関数の先頭からyield文までが実行され、yieldされた値を取り出して停止します。イテレータから次の値を取り

                                                PHP5.5のジェネレータをSPLのイテレータと組み合わせてみる - hnwの日記
                                              • イテレータによってGoはどう変わるのか - Gopher Day Taiwan 2024 基調講演登壇レポート

                                                はじめに 株式会社ナレッジワークの上田(@tenntenn)です。 2024年5月25日(土)に台湾で行われたGopherDay Taiwan 2024というGoのカンファレンスにキーノート(基調講演)スピーカーとして招待頂き参加しました。 登壇中の様子 筆者は過去に海外カンファレンスであるGopherCon(アメリカ)やGopherCon India(インド)にプロポーザルを提出し、登壇した経験があります。しかし、基調講演を行うのは初めてで英語の登壇も数年ぶりでした。 基調講演のお誘いは、前職(株式会社メルペイ)の同僚であるtenling(てんりん)さんからで、2023年のアメリカで行われたGopherConでお話したことがきっかけでした。 他の登壇者との写真。左からマネーフォワードのluccafortさん、メルペイのtenlingさん、筆者、LINEのDevRelで筆者と同じGoogl

                                                  イテレータによってGoはどう変わるのか - Gopher Day Taiwan 2024 基調講演登壇レポート
                                                • Ruby のイテレータ (2) – Enumerable と Comparable モジュール

                                                  「Ruby のブロック付きメソッドとイテレータ - yield の様々な使い方」のつづき 1. 要素を保持する親クラスと、要素となる子クラス 次のような例を想定する。 「人」が「グループ」 に所属している。 「人」は `名前' と `年齢' を属性として持つ。 「グループ」クラスは親クラスで、「人」クラスは要素となる子クラス。 class Person attr_reader :name , :age def initialize(name,age) @name = name @age = age end end 親クラスとなる「グループ」は、保持する「人」の集合に対して責務を持っており、「人」を「グループ」に追加する操作を持つとする。 class Group def initialize @persons = [] end def add(person) @persons << pers

                                                    Ruby のイテレータ (2) – Enumerable と Comparable モジュール
                                                  • Rustのイテレータの網羅的かつ大雑把な紹介 - Qiita

                                                    はじめに 正直なところ、公式ドキュメント std::iter::Iterator - Rust を読めば終了、この記事は不要、という感じはある。 しかしこのページ、例とかは豊富だし良いのだが、関数の並べ順がどうにも微妙な感じがするので、メモを兼ねて用途別(独断と偏見による分類)で紹介してみることにする。 あと、関数の型はHaskell風に書くと流れる感じがあって良い(イテレータの用途とマッチしている気がする)ので、 T -> U -> V のように書くことがある。 とはいえ、わかりやすさ優先で書くと FnMut とか FromA: Default + Extend<A> みたいな独特の情報が失われてしまったため、やはり公式のドキュメントをあわせて見ることをおすすめする。(リンクを沢山張ったので、発見次第別ウィンドウで開くくらいの勢いが良い。) それから、以下で Iterator<T> と書

                                                      Rustのイテレータの網羅的かつ大雑把な紹介 - Qiita
                                                    • 教えながら学ぶRuby:イテレータに片思い

                                                      ということでやっとRubyの勉強を始めた私だが、「何かを学ぶには人に教えるのが一番」というポリシーの私としては、早速Rubyに関するエントリーを書かずにはいられない。 Rubyという言語に関しては色々な意見があるとは思うが、私が(いまのところ)一番気に入っているのはイテレータという考え方。これは美しい。できることならば、forとかwhileのない言語にしてくれればもっと美しかったのにと思うぐらいだ。ここからしばらくは、forとwhileを一切使わずにどこまで出来るかを試してみようと思う。 そう思いながら読み始めた「オブジェクト指向スクリプト言語Ruby(以下「Ruby本」)」。Rubyの生みの親であるまつもとゆきひろ氏自身の手になるものだ。彼なりのイテレータへの思い入れが伝わってくるに違いない... ところが、である。 この本の最初の方に出てくるサンプルがなぜかイテレータを使わずにwhil

                                                      • ファイル検索イテレータ Find::File::Iterator って便利かも?

                                                        Perl でディレクトリ一覧を取得するとき、File::Find を使ったり、opendir でゴリゴリ書いたりってのが普通だったりしませんか?Perl 標準だけで書けるので。僕の場合は、配布用 CGI とかは、File::Find を使って、それ以外では自前のモジュールって感じで使っていました。 で、最近 File::Find::Iterator を今更ながら知りました。なんか 2003 年でメンテナンスが止まっているっぽいですが、なかなか優れもののモジュールです。ソースを見ると File::Find を継承したものではなく、Class::Iterator を継承して IO::Dir 使って書かれてます。今、Author をよく見たら作者が同じだった・・・。 File::Find を使った場合は、 use File::Find; our @files; our @dirs; find(\

                                                        • 教えながら学ぶRuby: それでも僕は君をイテレータと呼ぶ

                                                          前回の「イテレータに片思い」、たくさんのフィードバックをいただき、とても良い勉強になっている。一人でこつこつと勉強するよりも、励みになるしずっと楽しい。 ちなみに、1問目の問題だが、 def hello(to, *mesg) print "Hello, ", to, ".\n" print "-- message -- \n" for m in mesg print m, "\n" end end これに関しては、予想した通り、ほとんどの人が私と同じく、 def hello(to, *mesg) print "Hello, ", to, ".\n" print "-- message -- \n" mesg.each { |m| print m, "\n" } end という答えにたどりついた({..} のかわりに do..end でも良い)。圧倒的に読みやすいし、とにかく美しい。「プログ

                                                          • JavaScriptのジェネレータ関数とイテレータの仕組みをGIFアニメで解説

                                                            💡🎁 JavaScript Visualized: Generators and Iterators by Lydia Hallie 下記は各ポイントを意訳したものです。 ※当ブログでの翻訳記事は、元サイト様にライセンスを得て翻訳しています。 ES6ではジェネレータ関数と呼ばれるクールなものが導入されました🎉 ジェネレータ関数について尋ねると多くの人は、「知っているけど、混乱して二度と見ていない」「ブログで読んでみたけど、よく分からない」「分かるけど、みんななんで使ってるの」🤔 私も昔は同じように思っていました。しかし!実はかなりクールです!! ジェネレータ関数とは何でしょうか? まずは、通常の昔ながらの関数を見てましょう👵🏼 昔ながらの関数 これについては何も特別なことはありません。ごく普通の関数で、値を4回ログに記録するだけの関数です。 では、実行してみましょう! 「通常の

                                                              JavaScriptのジェネレータ関数とイテレータの仕組みをGIFアニメで解説
                                                            • イテレータを返す関数を書きたいんですけど? → やめとけ。 死ぬぞ。 - Qiita

                                                              !!この記事の内容はもう古いです。 詳しくはコメント参照!! こんにちは。 Rust記事です。 Rust、比較的新しい言語じゃないですか。 頑張ってチュートリアル読んで、じゃあなんかちょっとしたアルゴリズムでも書いてみるか、ってなるじゃないですか。 で、大体のちょっとしたアルゴリズムって、まぁ普通は配列とかマップとか、そういうデータ集合のデータ構造が出てきますよね。 もちろんそんなデータ構造を関数間で受け渡ししたくなるじゃないですか。 で、『Vec作って返すよりもイテレータの状態で返したほうがパフォーマンスいいんじゃない?』って場面はまぁあると思うんですよ。 やめとけ、死ぬぞ。 っていうのが今回の主旨です。 イテレータを返す関数って、どんな定義になると思いますか? ここでは適当に、Vec<i32>を2つ受け取って、それらを連結した上で3の倍数の要素のみを返したい、とか考えましょう。 たぶん

                                                                イテレータを返す関数を書きたいんですけど? → やめとけ。 死ぬぞ。 - Qiita
                                                              • Rustのイテレータの網羅的かつ大雑把な紹介 - Qiita

                                                                はじめに 正直なところ、公式ドキュメント std::iter::Iterator - Rust を読めば終了、この記事は不要、という感じはある。 しかしこのページ、例とかは豊富だし良いのだが、関数の並べ順がどうにも微妙な感じがするので、メモを兼ねて用途別(独断と偏見による分類)で紹介してみることにする。 あと、関数の型はHaskell風に書くと流れる感じがあって良い(イテレータの用途とマッチしている気がする)ので、 T -> U -> V のように書くことがある。 とはいえ、わかりやすさ優先で書くと FnMut とか FromA: Default + Extend<A> みたいな独特の情報が失われてしまったため、やはり公式のドキュメントをあわせて見ることをおすすめする。(リンクを沢山張ったので、発見次第別ウィンドウで開くくらいの勢いが良い。) それから、以下で Iterator<T> と書

                                                                  Rustのイテレータの網羅的かつ大雑把な紹介 - Qiita
                                                                • Javascript から見る Ruby のイテレータ - Enumerable

                                                                  「JavaScript のクロージャ と オブジェクト指向 」のつづき Ruby の Enumerable Ruby ではコンテナの役割を持つクラスに Enumerable モジュールをインクルードし、その要素を順にブロックに与えるメソッド each を定義することにより、要素に対する便利なメソッドがいくつか使えるようになる。 例えば、「人」は `名前' と `年齢' を属性として持ち、 「グループ」 に所属しているとする。 Ruby のイテレータ (2) - Enumerable より # 人 class Person attr_reader :name, :age def initialize(name, age) @name, @age = name, age end def to_s @name + " " + @age.to_s end end # グループ class Grou

                                                                  • [サンプル] イテレータとマイクロスレッド

                                                                    概要 ゲーム開発の分野を中心として、 マイクロスレッド(microthread)あるいはコルーチン(coroutine)、ファイバー(fiber)などと呼ばれる概念が考えられています。 C# 2.0 の「イテレーター」構文を使うと、 マイクロスレッドと似たようなことができます。 デモ → シューティングゲーム風。 ( ソース一式 (zip 形式)。) マイクロスレッドとは 狭い分野でしか使われてない言葉なので、 定義も用語もあまりはっきりと固まっていないんですが、 ここでの説明は数ある定義のうちの1つだと思ってください。 マイクロスレッドというものの背景には、 アクションゲームやシューティングゲームの敵や弾の動作ロジックをどう書こうかという話があります。 シューティングゲームなどでは、時間をフレームと呼ばれる単位に区切って、 1フレームごとに敵や弾の位置を更新するという方式をとる場合が多い

                                                                      [サンプル] イテレータとマイクロスレッド
                                                                    • Javascriptのイテレータ備忘録 (agenda)

                                                                      イテレータについてはHawk's Laboratory » JavaScript 1.7の新機能が詳しいけれども、一応自分用のメモとして残しておく。 Javascriptにおけるイテレータは抽象クラス様のオブジェクトであり、nextメソッドを持つことだけが要求される。ちなみにJavascriptといったらここではJavascript1.7(以下略)。 次のようなコードを考える: for each (let 変数 in オブジェクト){} for (let 変数 in オブジェクト) {} for each文、for in文におけるループでは、そのオブジェクトの__iterator__プロパティが(あれば)callし、それをイテレータとして利用する。ループ毎にそのnextメソッドがcallされその戻り値が変数に格納される。nextメソッドがStopiteration例外を投げると暗黙的にca

                                                                      • 【Ruby】case、ラムダ構文、高階関数、外部イテレーター、===演算子、zipメソッド、 - せかいや

                                                                        ■topic summary study about "case-when" about Ruby. 例によって、hp12cさんの記事を元にお勉強。 Rubyのcaseを〇〇(言語名)のswitch文だと思っている人たちにぼくから一言ガツンと申し上げたい hp12cさんの書くコードは「Rubyぽさ」がすごくよく表現されていて、勉強になる。。 この記事もちょっと長いけどいろんな発見があった! 他にはFiberの使い方とか 行列を使わないダイクストラ法の実装方法などを勉強させてもらってます。 問題 名前name、レベルlevel、ポイントpointの各属性を持った複数のCharacterオブジェクトcharlie, liz, benがある。 キャラクタのレベルに応じてポイントを加算するbonus_pointメソッドを実装せよ。但し、キャラクタレベルがlow(1〜3)のときは10ポイント、mid

                                                                          【Ruby】case、ラムダ構文、高階関数、外部イテレーター、===演算子、zipメソッド、 - せかいや
                                                                        • Rubyのブロック構文のように、Javaで全行処理し終わったら勝手に閉じるイテレータを作る - 矢野勉のはてな日記

                                                                          Java(2006/10/6追記:以下の記事のコードには重大なミスがあって、事実上このコードは使えないことにご注意を。一度書いたものだし翌日の日記へのつながりもあるので消しませんが、バグがあるという前提で読んでください。詳細はコメント欄を。) (2006/10/14追記:)代わりに「Rubyのブロック構文のように、Javaでどういう終わり方をしようが確実にファイルをクローズする全行処理メソッドを作る」という話を下記日記で続けてやっています。http://d.hatena.ne.jp/t_yano/20061004/1159987463http://d.hatena.ne.jp/t_yano/20061008/1160331809http://d.hatena.ne.jp/t_yano/20061011/1160581075 最近http://itpro.nikkeibp.co.jp/art

                                                                          • RubyのRangeクラスと範囲オブジェクト、範囲演算子、イテレーターの使い方

                                                                            RubyのRangeクラスと範囲オブジェクト、範囲演算子、イテレーターの使い方:若手エンジニア/初心者のためのRuby 2.1入門(4)(1/3 ページ) オープンソースのオブジェクト指向プログラミング言語「Ruby」の文法を一から学ぶための入門連載。最新版の2.1に対応しています。今回は、範囲オブジェクトを扱うRangeや範囲演算子の基本操作、各メソッドの使い方、イテレーターの基礎的な使い方に加え、イテレーターを使う利点などを解説します

                                                                              RubyのRangeクラスと範囲オブジェクト、範囲演算子、イテレーターの使い方
                                                                            • イテレータを実装しよう

                                                                              イテレータ(iterator)は C++ STL(Standard Template Library)の中核を成す概念のひとつで、ポインタの機能を抽象化したものである。 参照外し(dereference)、インクリメント・デクリメント、比較などのポインタ同等の機能を持つ。 STLの各コンテナには、それ専用のイテレータクラスが定義されており、 イテレータオブジェクトの生成はコンテナの begin(), end() メソッドなどで行う。 コンテナの最大要素を取得する例: vector<int> cntn; ..... // cntn にデータを格納する処理 int val = MIN_INT; for(vector<int>::iterator itr = cntn.begin(); itr != cntn.end(); ++itr) val = max(val, *itr); イテレータは、

                                                                              • Python のイテレータ

                                                                                1. ジェネレータを理解するためには、イテレータから Python における リスト内包表記 を理解したので、次は、9.9 ジェネレータ (generator)。 ジェネレータは、イテレータを作成するための簡潔で強力なツールです。 と説明があるので、ジェネレータを理解する前に、 イテレータ について確認する。 2. イテレータ の実装方法と使い方 9.8 イテレータ (iterator) によると、その役割は for 文と連携することにある。 for 文を使うとほとんどの コンテナオブジェクトにわたってループを行うことができます Python のイテレータは、Java の For-each Loop に似ている。 cf. Java: For-each Loop CCC Ruby のイテレータ (2) - Enumerable で考えた同じ例を、Python のイテレータで実装してみる。例の

                                                                                  Python のイテレータ
                                                                                • 特集 C# 2.0新機能徹底解説(後編) ― 進化したC# 2.0の状態管理、匿名メソッドとイテレータ(1/4) - @IT

                                                                                  前編では、C# 2.0の3つの主要な新機能のうち、ジェネリック(Generics)についての概要を解説した。後編である今回は、残る2つの新機能、 匿名メソッド(Anonymous Methods) イテレータ(Iterator) について解説を行っていく。 匿名メソッドとイテレータはどちらも、状態管理に必要なロジックをプログラマに代わって生成してくれるという特徴を持っている。ここでいう状態管理とは、スコープを越えたローカル変数の管理や、foreach文によるループ処理内部での実行ポイントの管理のことである(詳細は追って説明する)。 特にイテレータは、複雑な状態管理をコンパイラにより生成されるMSILコードが自動的に行ってくれる。これにより、単純なコードでも複雑な状態を表現できるようになる。その変化は衝撃的だ。今回はその変化の仕組みの内側を探ることで、C# 2.0が持っている状態管理の全容を