Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
    bleis-tift
    @bleis-tift
    「存在する・しない」という観点からすると、Nullableに相当という説明はアリだと思います。ただ、何のエクスキューズもなしに「Nullableに相当」とするのが抵抗がある、という感じです。
    Kouji Matsui
    @kekyo
    あー了解です
    bleis-tift
    @bleis-tift
    まぁ、ここは細かい部分(こだわり/自己満足)なので、それをしたところで意図が正しく伝わるかといわれるとアレ
    あと同じ部分で、int.TryParseがコードには出てきませんが、説明には出てくるので、これはミスと思われます。
    Kouji Matsui
    @kekyo
    そうですね、これで意識しているのは、ほかの言語知っててパターンマッチング知らないと言う人に、ちょっとづつ段階的に応用出来そう感を感じてもらうというところだったので
    bleis-tift
    @bleis-tift
    最後に捕捉部分なんですが、「より複雑な論理演算子」とありますが、論理演算子は不適切な用語です。
    Kouji Matsui
    @kekyo
    あ、そこボツらせて書き直した部分で直しミスですね
    昨日の夜、MSDNga
    bleis-tift
    @bleis-tift
    全体的にはとても素晴らしいと思います。以上の指摘は、あくまで用語厨な自分からの意見なので、分かりやすさのために正確さを犠牲にする、という判断はアリだと思います。
    Kouji Matsui
    @kekyo
    がアレになってる事にきがついて、日本語的にどう呼ぶべきかちょっと迷ったんですが... これ、そのままだと「パターン」じゃないかと思ってて、でもパターンだとなんかあやふやな気がしてます。何かいい呼称があるといいんですが...
    bleis-tift
    @bleis-tift
    パターンでいいと思いますよ
    Kouji Matsui
    @kekyo
    ありがとうございます。わりと書き上げたらさくっと公開してしまうほうなので、参考に修正しておきます!
    callmekohei
    @callmekohei

    <mscorlibに関して>

    C#ポケットリファレンスという本の202ページにコレクションのクラス・インターフェースとして下記のlstの分が載ってたのですが、mscorlibから引っ張りだせません。名前が違うのでしょうか?ヒントを教えていただけると嬉しいです。

    module Test =
    
        let dotNetAPIList =
            typeof<obj>.Assembly.GetTypes ()
            |> Array.map ( fun t -> ( t.Namespace, t.Name ) )
            |> Array.sortBy id
            |> Array.distinct
    
        let mySeek targetName =
            dotNetAPIList
            |> Array.filter ( fun tpl -> snd tpl = targetName )
            |> Array.iter ( printfn "%A" )
    
        let lst = ["ICollection";"List";"LinkedList"
                   "HashSet";"Dictionary";"Queue";"Stack"]
    
        for v in lst do
            mySeek v

    結果

    ("System.Collections", "ICollection")
    ("System.Collections", "Queue")
    ("System.Collections", "Stack")
    Matsushima, Kazuhiro
    @Gab-km
    例えば LinkedList についてですが、まずはMSDNの該当ページを参照してみましょう。
    ここの頭の方に「アセンブリ」という項目がありますが、ここには「System.dll にあるよ!」と書いてあります。
    こういうので意図は合っていますか?
    callmekohei
    @callmekohei

    ガブさん!ありがとうございます!

    typeof<obj>.Assembly.GetTypes ()

    ということはここの部分が違ってるということっぽい??

    Matsushima, Kazuhiro
    @Gab-km

    obj (System.Object クラス)はmscorlibの持ち物なので、上のやり方だと

    (* obj型の入っているアセンブリにある型全てを取得する => mscorlibに入っている型だけ取得する *)
    typeof<obj>.Assembly.GetTypes ()

    という意味になるかと思います。

    callmekohei
    @callmekohei
    なるほどです。。
    このdllから情報を引っ張ればいいのか〜。どうやれば。。。
    Screen Shot 2016-05-16 at 20.34.29.png
    Matsushima, Kazuhiro
    @Gab-km
    ところで、上の lst で指定しているクラス名ですが、mscorlibにあるもの、つまりSystem.Collections直下にあるものを意図していますか?
    System.Collections.Genericの方を探す必要があったりしないでしょうか……?
    型名からは、ジェネリックあり/なしが判別できませんでしたので。。。
    callmekohei
    @callmekohei
    System.Collections.Genericも、含まれてます!それでも出てこなかったので、不思議におもったのですよ。
    Matsushima, Kazuhiro
    @Gab-km
    例えばですが、AppDomainにある全てのアセンブリを取ってきて、その中の全ての型を見て回る、というのはどうでしょうか?
    callmekohei
    @callmekohei
    ありがとうございます!やってみます!
    omanuke
    @omanuke
    F#のasyncに比べてのC#のasyncやTaskの意味不明さにキレそう
    callmekohei
    @callmekohei
    できました〜。結論からいうと名前が違ってました!
    // mscorlib
    ("System.Collections", "ICollection")
    ("System.Collections.Generic", "List`1")
    ("System.Collections.Generic", "Dictionary`2")
    ("System.Collections", "Queue")
    ("System.Collections", "Stack")
    
    // SystemCoreDll
    ("System.Collections.Generic", "HashSet`1")
    ("System.Linq.Expressions.Compiler", "Stack")
    
    // SystemDll
    ("System.Collections.Generic", "LinkedList`1")
    こんな感じでした〜
    Class Name   Assembly         Namespace                    alias name
    ----------   ---------------  ------------------           -------------
    ICollection  mscorlib.dll     System.Collections
    List         mscorlib.dll     System.Collections.Generic   List`1
    LinkedList   System.dll       System.Collections.Generic   LinkedList`1
    HashSet      System.Core.dll  System.Collections.Generic   HashSet`1
    Dictionry    mscorlib.dll     System.Collections.Generic   Dictionary`2
    Stack        mscorlib.dll     System.Collections
    Queue        mscorlib.dll     System.Collections
    一応コードです。AppDomainのコードはこれからとりかかります!
    https://gist.github.com/callmekohei/08dd448615c029b97974871b6be2e7de
    KURATA Sayuri
    @sayurin
    それはAppDomainではないですねぇ…ただ実行時なので読み込んでない場合は見つかりませんから、そのコードの方法でもいいのかも
    callmekohei
    @callmekohei
    sayurinさん!なるほどです!
    Kouji Matsui
    @kekyo
    わかりにくいです > Task Taskからやったので慣れたんですが、F# Async理解して拍子抜けしたというか、あれこんなに簡単だっけ?みたいな
    あんまり詳しく解説してないですが: http://www.kekyo.net/2016/04/17/5804
    omanuke
    @omanuke
    今日調べてたのはイベントが不定期に上がり、それをUIスレッド上でイベントに応じた非同期の処理、例えばViewをPopupアニメーションして表示し終わったら処理を抜けるなどをしたくて、イベントをもとにasync Task Hoge(xxx){xxx}などと記述されたものをシーケンシャルに実行する…だったんですが、TaskとTask<T>でいろいろ扱い違うし、イベントをF#のasync式のように変換してから適当なタイミングで実行とかしたかったけど、asyncで書かれたものを実行せずにTask化する方法分からないし、なんかRxのConcatでいけそうだったんだけどうまく動かないしで、何の成果も得られませんでしたー(´・ω・`)
    自分的にはTaskへの変換とその評価としての実行が分離しにくいのがとてもいやんな感じです(;´・ω・)
    adacola
    @adacola
    RxのConcatって最初のObservableがCompletedにならないと次のObservableの処理に移らないのでそのせいだったりしませんか?
    もしそうならMergeでいけるかもしれません
    あーでもMergeだとTaskを1つずつシーケンシャルに実行ができませんね…
    Kouji Matsui
    @kekyo
    あー出来るんかな > asyncで書かれたものを実行せずにTask化する
    KURATA Sayuri
    @sayurin
    Taskって実行開始するのが前提にありませんでした?
    Kouji Matsui
    @kekyo
    メソッド内の最初のawaitまでは普通に動いてしまう(Async.StartImmediateみたいなもの)ので、Func<Task<T>>みたいなので受けておいて、必要になったら呼び出して開始かなぁ
    シーケンシャルに処理を並べたいのなら、単に順番に await HogeAsync(); await HagaAsync(); ... とかやれば良いですよ
    iterateできるなら foreachで回しながらawaitするとかかな
    TaskとTask<T>でいろいろ扱い違う というのは分からなかった。TResult以外に違う?
    これは全くその通り > Taskへの変換とその評価としての実行が分離しにくい
    KURATA Sayuri
    @sayurin
    Action : Func vs Task : Task<T> で、コードが共通化できないことが扱いづらいって言っているんじゃないかな
    F# asyncでもそこのところが面倒だし…
    KURATA Sayuri
    @sayurin
    Async.AwaitTaskの引数はTask<T>だからTaskを扱えないのよねぇ…
    Kouji Matsui
    @kekyo