作りたいモジュールできました : Linq.pm

Jul 29, 2014  

現在、Perl入学式や、Perl Beginnersというイベントに参加させて頂きPerlを勉強中です。

いまのとこPerlを勉強していて、Perlは配列とハッシュ(リファレンス含め)をいかに使いこなせるようになるかが、初心者脱却のカギになると感じています。

自分は普段の業務でVB.NET書いていまして、VB.NETにはLINQという、
リストを小洒落た感じで操作できるクラスが実装されています。
これがPerlにあったら便利だと思い、若干調べたらList::Utilなどはあれど、、、という感じでした。

まだまだ勉強中の身ですが(.NETも)、折角作りたいモジュールができたし、
作りながら勉強すればいいやということで、内容をまとめました。

以下、コンセプト。(まだ1行もコード書いてません)
文法おかしい箇所もありますが、あくまでもコンセプト。


p5-Linq

NAME

Linq.pm (need more consideration) - LINQ for Perl

SYNOPSIS

use Linq;

my $mh = [
    { user => { id => 1, name => 'Sherlock' }, toys => 'Psychokinesis' },
    { user => { id => 2, name => 'Nero' },     toys => 'Direct Hack' },
    { user => { id => 3, name => 'Elly' },     toys => 'Tri-Ascend' },
    { user => { id => 4, name => 'Cordelia' }, toys => 'Hyper Sensitive' },
];

my $result = enumerable->from($mh)
                       ->where(sub(x)  { x->{user}{id} < 3 })
                       ->select(sub(x) { x->toys })->to_array;

DESCRIPTION

.NET’s LINQ for Perl, Inspired from linq.js

METHODS

Refered from Linq.js (Some are deleted)

aggregate, all, alternate, any, average, buffer_with_count, cascade_breadth_first, cascade_depth_first, catch, choice, concat,
contains, count, cycle, default_if_empty, distinct, do, element_at, element_at_or_default, empty, except, finally, first, first_or_default, 
flatten, for_each, force, from, generate, get_enumerator, group_by, group_join, index_of, insert, intersect, join, last, last_index_of,
last_or_default, let, matches, max, max_by, memoize_all, min, min_by, of_type, order_by, order_by_descending, pairwise, partition_by, 
range, range_down, range_to, repeat, repeat_with_finalize, return, reverse, scan, select, select_many, sequence_equal, share, shuffle,
single, single_or_default, skip, skip_while, sum, take, take_except_last, take_from_last, take_while, then_by, then_by_descending, to_array,
to_dictionary, to_json, toLookup, to_object, trace, unfold, union, where, write, write_line, zip

SEE ALSO

最後に

  • そもそも.NETのLINQにも知らないメソッドたくさんあるけど、.NETの理解にも繋がればよいと思った。
  • SYNOPSISの ->where(sub(x) { x->{user}{id} < 3 }) 辺り、勉強不足が露呈している。

類似のモジュールや、ご指摘等あれば@htk291などへご連絡ください。

このエントリーをはてなブックマークに追加