CAD日記

主にAutoCADのことについて書いているけど、近頃は投資系ネタに注力している。自動売買、仮想通貨、PC関係、プログラミングなど。@caddiary

ソフト開発

イテレータ(Iterator)

投稿日:

あるコンポーネントで初めて出会いました。コンポーネントがバージョンアップされたときに、オブジェクト指向的な作りに一新されて、いろいろ変わったのですが中でもイテレータという訳の分からないものに遭遇して、戸惑った覚えがあります。例を挙げるとこんな感じです。(VC++)

OdDbObjectIteratorPtr pIter = pBtr->newIterator();

for( ; !pIter->done(); pIter->step() )

{

OdDbEntityPtr pEnt = pIter->objectId().safeOpenObject();



}

別になんてことのないforループですけど...

「プログラミングにおいてイテレータとは、リストや、それに類似するデータ構造の、各々の要素に対し繰り返し処理の抽象化したものである。実際のプログラミング言語では、オブジェクトまたは文法などとして現れる。反復するためのものの意味で反復子と訳される。」(ウィキペディアより引用)

オブジェクト内に反復処理を保持しているということが特徴です。また、繰り返しの途中の状態を保存しておいて、あとで再開することが可能です。オブジェクト指向がわからないとプログラマーとしては未熟だと言われてしまう今の時代、重要なキーワードになるでしょう。

前述のコンポーネントの話ですが、そのバージョンアップには正直ビビリました。構造体と関数で作り込まれていたものが、ほとんど全部クラスになったのです。CがC++になったということです。それまで、クラスを使ったことがほとんどなくて、初めて本格的にクラスに触れた機会でした。今でも完全にマスターしたわけではありませんが、そこそこ解ってきたつもりです。

その時に同様に初めてみたものに「スマートポインタ」というものもあります。いつか機会があれば、これについて書いてみたいと思います。

forループで思い出しましたが、whileループが嫌いです。永久ループになりやすいので。きっちりと回数を決めてループさせるのが、精神衛生上好ましいです。どうしても使わなければならない場合もあるので、その場合はきっちりとbreak条件を設定します。永久ループは致命的なバグになります。過去に何度か、痛い目を見ました。whileは要注意です。

-ソフト開発
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

Teigha改めODAでDWGをDXFに変換するプログラムをつくってみよう!【Part.2】

Part.1ではあれこれと前提の話を書いたわけだが、今回は実際にVCのプロジェクトを作る準備をしてみよう。 1.ODAモジュールのダウンロード 2019 Update 2のKernelとDrawing …

PDFアレコレはこんなところが落としどころかね

この3連休はPDFiumを使ったサンプルアプリ作成に取り組んでいて、まぁそこそこの感じにできあがったのでここらでいったん完成としておく。

no image

通常使うプリンタを取得する

通常使うプリンターを取得する方法をいくつか挙げる。 ①GetDefaultPrinter TCHAR printerName[1024]; DWORD dwBufferSize = 1024; BOO …

zipcopy Ver1.07リリース

zipcopyをリビジョンアップして、Ver1.07とした。 詳細は以下の通り。 Ver1.07 2020/3/1 ・zip圧縮と解凍、ファイルコピーと削除処理についてスレッド化して、これら処理中にダ …

no image

環境変数TEMPトラブルについて振り返る

プログラムから環境変数TEMPで指定されたフォルダにファイルが作れないことがわかった時点で、この問題は解決したも同じだった。TEMPの値を「%USERPROFILE%\AppData\Local\Te …