SlideShare a Scribd company logo
1 of 47
Objective-C
    de
  lambda
     松浦 明彦
    @matu_ani
        1
自己紹介
• コップ本読んでる途中な程度
• 札幌C++勉強会メンバー(最年長w)
 •   「プログラミングの魔導少女」:巻末記事

• 監修メンバー
 •   「C++の設計と進化」(通称:D&E)

 •   「ストラウストラップのプログラミング入門」
     (通称:鈍器w)

• ジャズと酒が趣味、シングルパパです。
             2
お話しすること・ねらい
• Objective-Cの紹介がてら、関数型つなが
 りでObjective-Cのラムダ式(Blocks)に
 ついてお話します。

 •   めざせBlocks完全制覇!!


• 実装・シンタックス寄り、現場的なお話し
 です。

• 関数型的なお話は殆どありません m(_ _)m
                 3
もくじ

• Objective-C 文法基礎
• Objective-C Blocks基礎
• Objective-C Blocks応用
• C++とBlocks
               4
Objective-C
  文法基礎
   さらっと流します...



        5
Objective-Cとは
• C言語にオブジェクト指向機能を追加:☓
• Smalltalk風 Object Systemの言語環境にて、C
 言語も使うことが出来る:○

  • Cの言語仕様自体には、何も足さない何も引かない。



                6
Objective-Cとは
• C言語にオブジェクト指向機能を追加:☓
• Smalltalk風 Object Systemの言語環境にて、C
 言語も使うことが出来る:○

  • Cの言語仕様自体には、何も足さない何も引かない。
 スクリプト言語並の動的言語と静的型付
 け言語が共存するハイブリッドな環境
                6
Smalltalk 例
"initializeメッセージをaMyObjectに送信"
aMyObject initialize.

"引数30のsetSizeメッセージをaSquareに送信"
aSquare setSize : 30.

"オブジェクト「3」にセレクタ「+」を引数「4」で送信"
total := 3 + 4.



                        7
Objective-Cでのメッ
セージ送信
• メソッド呼び出しは、メッセージ(セ
 レクタ)送信の結果である。

// 単項メッセージ(引数なし)
[receiver msg];
// receiver->msg();

 // 引数付きメッセージ
val = [receiver msg: arg1 with: arg2];
// val = receiver->msg( arg1, arg2 );


                      8
Objective-Cでのメッ
セージ送信
• メソッド呼び出しは、メッセージ(セ
 レクタ)送信の結果である。

// 単項メッセージ(引数なし)
[receiver msg];
// receiver->msg();
                          [] で囲う
                                   メッセージキーワード
 // 引数付きメッセージ
val = [receiver msg: arg1 with: arg2];
// val = receiver->msg( arg1, arg2 );


                      8
クラスの宣言・定義
• クラスの宣言・定義には@コンパイラ
 ディレクティブを使う。

• 通常、宣言部を.hファイル、実装部を.m
 ファイルに記述する。(一緒でもよい)

• #importは#includeと基本同じだが、二
 重includeしない。

            9
#import <Foundation/Foundation.h>

// クラスの宣言
@interface MyClass : NSObject {
    int val;
}
- (id)init;
+ (void)classMethod:(id)arg; // クラスメソッド
- (id)method:(NSObject*)arg1 with:(int)arg2;
@end

// 実装
@implementation MyClass
+ (void)classMethod:(id)arg {
    // some operation
}
- (id)method:(NSObject*)arg1 with:(int)args2 {
    return obj;
}
@end


                         10
#import <Foundation/Foundation.h>

// クラスの宣言
@interface MyClass : NSObject {
    int val;
}
- (id)init;
+ (void)classMethod:(id)arg; // クラスメソッド
- (id)method:(NSObject*)arg1 with:(int)arg2;
@end

// 実装
@implementation MyClass
+ (void)classMethod:(id)arg {
    // some operation
}
- (id)method:(NSObject*)arg1 with:(int)args2 {
    return obj;
}
@end


                         10
制御構文

• if,while,for,とか、JavaやC++と同じ。
  AlarmFake* f = [[AlarmFake alloc]init];
  if( [f conformsToProtocol:@protocol(Alarm)]   )
  {
// ・・・
 }




                      11
基礎編、もうちょい


• C/C++との共存
• メモリ管理について


              12
C/C++との共存
• 普通にC/C++が使える。
• C++を使う場合、.mでなく、.mmにす
 る。(ていうか基本.mmにすべし)

• boostも使える。
• Xcode4.2のllvm-clangはC++11(一
 部)も!

             13
#import <Foundation/Foundation.h>
#include <iostream>
#include <boost/shared_ptr.hpp>

class CppClass{
public:                       C++のクラス
! CppClass(){}
! void print() const {
! ! std::cout << "CppClass::print" << std::endl;
! }
};

@interface ObjcClass : NSObject
- (void)print;
@end                            Objective-Cのクラス
@implementation ObjcClass
- (void)print {
! NSLog(@"ObjcClass print");
}
@end

void boost_test(){
! boost::shared_ptr<CppClass> p(new CppClass);!
! ObjcClass* oc = [[ObjcClass alloc]init];!
! [oc print]; // ObjcClass print
! p->print(); // CppClass::print
}
                             14
メモリ管理

• Objective-Cのクラスは静的には生成で
  きない。必ずallocする。



MyObject* obj = [[MyObject alloc] init];
[obj method :arg with:10];




                    15
参照カウンタ
 • 難敵:retain,release,autorelease
MyObject* obj = [[MyObject alloc] init]; // 参照カウント1
[obj retain]; // 参照カウント2
NSLog(@"count=%d", [obj retainCount] ); // count=2
[obj release] ; // 参照カウント1
[obj release] ; // 参照カウント0,開放される
・・・
// メモリプールが有効なあいだ生きてる
MyObject* obj = [[[MyObject alloc] init] autorelease];
[obj retain]; // 参照カウント2、メモリプールの生き死に関わらず保持した
い!




                             16
簡単にリークするw
• release忘れ
• retainしすぎ
• autorelease忘れ
• しかも、これらが絡み合うww

• ..... Appleが示した解決策は
              17
Automatic Reference
Counting (ARC)
• iOS5、MacOSX10.6から
• Xcode4.2ではデフォルト
• 参照カウンタ管理をコンパイル時に解決し
  てくれる。ヽ(^。^)ノ
• retain/release/retainCount等は書かなく
  ていい。
  •   てか、書いたらコンパイルエラー orz

• GCとは別(GCもオプションであり)
                18
その他の機能
•   ランタイムシステム
•   プロパティ
•   プロトコル
•   カテゴリ
•   クラスエクステンション
•   クラスクラスタ
•   例外
•   GC
•   高速列挙
     •   ・・・などなど、あと、フレームワークには一切触れてません



                    19
Objective-C
  Blocks

     20
Blocks基礎


   21
Blocksって

• ようはラムダです。
 •   ラムダ式のリテラル

• MacOSX 10.6/iOS 4.0以降
• AppleのC言語の拡張
 •   http://www.open-std.org/jtc1/sc22/wg14/
     www/docs/n1370.pdf


                     22
Declaring a Block




•   シンタックスはCの関数ポインタと似ている。

•   ^ を使う。
              23
Using a Block

void (^b1)(int) = ^(int x){NSLog(@"Hello Blocks %d",x);};
b1(100); // Hello Blocks 100


// パラメータ無しなら定義側は()を省略してもOK
void (^b2)() = ^{NSLog(@"Hello Blocks 2");};
b2(); // Hello Blocks 2




                            24
パラメータにBlock
void blocks_caller( void (^f)(void) )
{
! f();
}

void blocks_test()
{
! blocks_caller( ^(){ NSLog(@"test1");} );
}



                     25
Blocksどーよ
• 最近のCocoaAPI は積極的にBlockを
 使う傾向にある(iCloud APIとか)。

• なんだかんだメモリ管理を意識。
 Automatic Reference Counting
 (ARC) のもとで使うのが良さそう。

• 過渡期っぽい.....が、今後は重要なプロ
 グラミングスタイルと思われ。
              26
Blocks応用
       といっても、
キャプチャとかBlockの寿命とかそのへん




          27
変数のキャプチャ

• ローカル変数、グローバル変数をBlock
 内で使用可能

• ローカル変数はデフォルトで、イミュー
 タブル、かつBlock構築時のコピー



          28
キャプチャの例
int g=999; // グローバル変数
・・・
int x = 100;
void (^b)() = ^(){NSLog(@"x=%d g=%d",x,g);};
b(); // x=100 g=999

x=200;
b(); // x=100(変わらず)
g=888;
b(); // x=100 g=888


                      29
ミュータブルで共有なキャ
 プチャ

__block int x=100;
void (^b)() = ^(){NSLog(@"x=%d g=%d", x++, g);};
b(); // x=100 g=999
b(); // x=101 g=999

x=200;
b(); // x=200 g=999




                      30
クラスで使う
     @interface testClass : NSObject{
         int x_;
     }
     -(void) myprint;
     -(void) print:(void(^)(int x))printer;
     @end

     @implementation testClass
     -(void)print:(void (^)(int x))printer {
         printer(x_);
      }


testClass* t = [[testClass alloc]init];
[t print:^(int x){ NSLog(@"my printer x=%d", x);}];


                        31
selfのキャプチャ
-(void)myprint { // testClassのメソッド
    x_ = 100;
    void(^b)()=^{ NSLog(@"x_=%d", x_);};
    b(); // x_ = 100

    x_ = 200;
    b(); // x_ = 200 !!(コピーと違うの??)

    // こう書いているのと同じ
    void(^b2)()=^{ NSLog(@"testClass x_=%d", self->x_);};
}


    • メンバー変数がキャプチャされているのではない
    • selfがキャプチャされている!
                           32
高階関数、部分適用
C#
Func<int, Func<int, int>> f = x => y => x + y;
Func<int, int> fc = f(1);
int x = fc(3); // 4 (1 + 3)



C++11
auto f = [](int x){ return [x](int y){return x+y;}; };
auto fc = f(1);
int x = fc(3); // 4 (1 + 3)




                          33
Blockだと。。
void blocks_test()
{
! typedef int (^add_function)(int);
! add_function (^f)(int) =
! ! ! ! ! ^(int x){
! ! ! ! ! ! return Block_copy(^(int y){ return x+y;});
! !   ! ! ! };


! add_function fc = f(1);
! NSLog(@"blocks_test() fc=%d", fc(3)); // 4 (1 + 3)
! Block_release(fc);
}



                             34
Blocks大事なこと
• Blockの生存期間はそのスタックと同じ。
• スタック外で使うならコピーが必要。
 •   Block_copy / Block_release

 •   ただ、コピーしなくてもコンパイル通る(事が多い)し、
     動くから恐ろしい。

• ARCのもとでは Block_copy /
 Block_release 不要。

 •   てかコンパイルエラーになる

                          35
ARCありなら...
void blocks_test()
{
! typedef int (^add_function)(int);
! add_function (^f)(int) =
                 ^(int x){return ^(int y){return x+y;};};
! add_function fc = f(1);
! NSLog(@"blocks_test() fc=%d", fc(3)); // 4 (1 + 3)
}



                  すっきり(^^)
                           36
軽くまとめ
• ローカル変数のキャプチャはデフォルトで
 イミュータブルかつBlock構築時のコピー。

• __block修飾されたローカル変数は、ミュー
 タブルとなり、そのスタック内のblockで共
 有される。

• Blockの寿命はスタックと同じ。スタック外
 でも使いたければcopyが必要。

• ARCが吉
           37
BlocksとC++
 実はここを一番話したかったという噂もw...




           38
C++11のfunction<T>
   にBlockを
std::function<void(int)> f
            = ^(int x){NSLog(@"Hello function!! x=%d",x);};

f(1); // Hello function!! x=1
f(2); // Hello function!! x=2



 std::function<T>は、Blocks対応に書き換え
 てあるのかな??


                            39
簡易function作った
template<typename R, typename ...V>
struct my_function {
    struct HolderBase{
        virtual R run(V... arg)=0;
    };
    template<typename F>
    struct Holder : HolderBase {
        F f_;
        Holder(F f):f_(f){}
        virtual R run(V... arg) {
            return f_(arg...);
        }
    };
    boost::scoped_ptr<HolderBase> holder_;

     template<typename F>
     my_function(F f) : holder_(new Holder<F>(f) ){}
     R operator()(V... arg) {
         holder_->run(arg...);
     }
};
                         40
my_functionにも
my_function<void,int> mf(^(int x){NSLog(@"my_function!! x=%d",x);});

mf(100); // my_function!! x=100



      • my_functionにBlocks固有のコードは無い。
      • BlocksはObjC固有の型だが、C++のジェネリッ
         ク型システムはそれを吸収した(とも言えるか
         と)。

      • 無論、std::functionは変更不要               (のはず) 。
                                  41
C++11 autoで型推論
// blockをautoで型推論
auto af = ^(int x){NSLog(@"Hello C++11 auto!! x=%d",x);};
af(5); // Hello C++11 auto!! x=5

// 高階関数も楽チン
auto f = ^(int x){ return ^(int y){ return x+y;};};
auto fc = f(1);
NSLog(@"Hello C++11 auto!! fc=%d",fc(3)); // fc=4




                           42
C++11 autoで型推論
// blockをautoで型推論
auto af = ^(int x){NSLog(@"Hello C++11 auto!! x=%d",x);};
af(5); // Hello C++11 auto!! x=5

// 高階関数も楽チン
auto f = ^(int x){ return ^(int y){ return x+y;};};
auto fc = f(1);
NSLog(@"Hello C++11 auto!! fc=%d",fc(3)); // fc=4




    やっぱC++かわいいw
                           42
ご清聴
ありがとうございました



     43

More Related Content

What's hot

C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~Fujio Kojima
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型信之 岩永
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexprGenya Murakami
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門natrium11321
 
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプC++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプKohsuke Yuasa
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会Akihiko Matuura
 
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#信之 岩永
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1Susisu
 
LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XMLLINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XMLShinichiAoyagi
 
知って得するC#
知って得するC#知って得するC#
知って得するC#Shota Baba
 
SEH on mingw32
SEH on mingw32SEH on mingw32
SEH on mingw32kikairoya
 
新しい並列for構文のご提案
新しい並列for構文のご提案新しい並列for構文のご提案
新しい並列for構文のご提案yohhoy
 
C++入門?
C++入門?C++入門?
C++入門?tsudaa
 
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Keisuke Fukuda
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarrayRyosuke839
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターンMoriharu Ohzu
 

What's hot (20)

C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型
 
Map
MapMap
Map
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
 
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプC++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
 
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
 
Emcjp item21
Emcjp item21Emcjp item21
Emcjp item21
 
C++11
C++11C++11
C++11
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1
 
LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XMLLINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XML
 
知って得するC#
知って得するC#知って得するC#
知って得するC#
 
C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0
 
SEH on mingw32
SEH on mingw32SEH on mingw32
SEH on mingw32
 
新しい並列for構文のご提案
新しい並列for構文のご提案新しい並列for構文のご提案
新しい並列for構文のご提案
 
C++入門?
C++入門?C++入門?
C++入門?
 
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターン
 

Viewers also liked

連邦の白いヤツ 「Objective-C」
連邦の白いヤツ 「Objective-C」連邦の白いヤツ 「Objective-C」
連邦の白いヤツ 「Objective-C」matuura_core
 
SPL fukuokaphp_1
SPL fukuokaphp_1SPL fukuokaphp_1
SPL fukuokaphp_1ichikaway
 
Essence of the iterator pattern
Essence of the iterator patternEssence of the iterator pattern
Essence of the iterator patternMarkus Klink
 
The Essence of the Iterator Pattern
The Essence of the Iterator PatternThe Essence of the Iterator Pattern
The Essence of the Iterator PatternEric Torreborre
 

Viewers also liked (8)

Chakkason.pptx
Chakkason.pptxChakkason.pptx
Chakkason.pptx
 
連邦の白いヤツ 「Objective-C」
連邦の白いヤツ 「Objective-C」連邦の白いヤツ 「Objective-C」
連邦の白いヤツ 「Objective-C」
 
SPL fukuokaphp_1
SPL fukuokaphp_1SPL fukuokaphp_1
SPL fukuokaphp_1
 
Matuura cpp
Matuura cppMatuura cpp
Matuura cpp
 
Essence of the iterator pattern
Essence of the iterator patternEssence of the iterator pattern
Essence of the iterator pattern
 
型! 型!
型! 型!型! 型!
型! 型!
 
The Essence of the Iterator Pattern
The Essence of the Iterator PatternThe Essence of the Iterator Pattern
The Essence of the Iterator Pattern
 
Iterator Pattern
Iterator PatternIterator Pattern
Iterator Pattern
 

Similar to Objc lambda

Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALVisual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALegtra
 
C++ lecture-0
C++ lecture-0C++ lecture-0
C++ lecture-0sunaemon
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 
C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編道化師 堂華
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッドKohsuke Yuasa
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2Masao Kato
 
C++0x 言語の未来を語る
C++0x 言語の未来を語るC++0x 言語の未来を語る
C++0x 言語の未来を語るAkira Takahashi
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューAkira Inoue
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio CodeAkira Inoue
 
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会Koichi Sakata
 
SystemC Tutorial
SystemC TutorialSystemC Tutorial
SystemC Tutorialkocha2012
 

Similar to Objc lambda (20)

JavaScript入門
JavaScript入門JavaScript入門
JavaScript入門
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 
C++0x総復習
C++0x総復習C++0x総復習
C++0x総復習
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALVisual C++コード分析を支えるSAL
Visual C++コード分析を支えるSAL
 
C++ lecture-0
C++ lecture-0C++ lecture-0
C++ lecture-0
 
Boost Tour 1_58_0 merge
Boost Tour 1_58_0 mergeBoost Tour 1_58_0 merge
Boost Tour 1_58_0 merge
 
Objectie-C de ラムダ
Objectie-C de ラムダObjectie-C de ラムダ
Objectie-C de ラムダ
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
C++0x 言語の未来を語る
C++0x 言語の未来を語るC++0x 言語の未来を語る
C++0x 言語の未来を語る
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービュー
 
C#勉強会
C#勉強会C#勉強会
C#勉強会
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio Code
 
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会
 
SystemC Tutorial
SystemC TutorialSystemC Tutorial
SystemC Tutorial
 
VerilatorとSystemC
VerilatorとSystemCVerilatorとSystemC
VerilatorとSystemC
 

Recently uploaded

ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdf
ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdfストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdf
ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdfmasakisaito12
 
ストックマーク株式会社がお客様へご提供しているAnews概要資料のご共有.pdf
ストックマーク株式会社がお客様へご提供しているAnews概要資料のご共有.pdfストックマーク株式会社がお客様へご提供しているAnews概要資料のご共有.pdf
ストックマーク株式会社がお客様へご提供しているAnews概要資料のご共有.pdfmasakisaito12
 
UP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチ
UP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチUP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチ
UP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチユニパー株式会社
 
202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)
202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)
202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)KayaSuetake1
 
シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料
シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料
シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料シンフォニティ 株式会社
 
株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店
株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店
株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店ssuserfb441f
 
20240427 zaim academy counseling lesson .pdf
20240427 zaim academy counseling lesson .pdf20240427 zaim academy counseling lesson .pdf
20240427 zaim academy counseling lesson .pdfssuser80a51f
 
Service-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadershipService-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadershipYasuyoshi Minehisa
 

Recently uploaded (8)

ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdf
ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdfストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdf
ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdf
 
ストックマーク株式会社がお客様へご提供しているAnews概要資料のご共有.pdf
ストックマーク株式会社がお客様へご提供しているAnews概要資料のご共有.pdfストックマーク株式会社がお客様へご提供しているAnews概要資料のご共有.pdf
ストックマーク株式会社がお客様へご提供しているAnews概要資料のご共有.pdf
 
UP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチ
UP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチUP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチ
UP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチ
 
202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)
202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)
202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)
 
シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料
シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料
シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料
 
株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店
株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店
株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店
 
20240427 zaim academy counseling lesson .pdf
20240427 zaim academy counseling lesson .pdf20240427 zaim academy counseling lesson .pdf
20240427 zaim academy counseling lesson .pdf
 
Service-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadershipService-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadership
 

Objc lambda

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n