Skip to content

Instantly share code, notes, and snippets.

View ufcpp's full-sized avatar

Nobuyuki Iwanaga ufcpp

View GitHub Profile
@ufcpp
ufcpp / DerivedRatherThanBase.cs
Last active August 29, 2015 14:15
overload resolution: derived rather than base
using static System.Console;
class Program
{
static void Main()
{
Derived.X(0); // object
Derived.X(""); // object。型よりも派生クラス側が優先
Base.X(""); // string
}
@ufcpp
ufcpp / constructor.cpp
Created February 8, 2015 11:34
variable initialization in C++
struct X
{
X() {}
};
void main()
{
X x(); // X 型の変数 x に対して、コンストラクター X() で初期化
}
@ufcpp
ufcpp / OutTypeInference.cs
Created February 8, 2015 11:55
type inference of out parameters in lambda expressions
delegate bool TryParse<T>(string text, out T result);
class Program
{
static void Main()
{
TryParse<int> parse1 = (string s, out int result) => int.TryParse(s, out result); // これは OK
TryParse<int> parse2 = (s, out int result) => int.TryParse(s, out result); // ダメ。1個だけ型名明示とかできない。
TryParse<int> parse3 = (s, out result) => int.TryParse(s, out result); // ダメ。out 型推論とかない。この機能がほしい。
}
@ufcpp
ufcpp / MultipleReturnByOutParameter.cs
Created February 10, 2015 15:44
multiple return values by out parameters
public void Tally(IEnumerable<int> values, out int sum, out int count) { ... }
int s, c;
Tally(myValues, out s, out c);
Console.WriteLine($"Sum: {s}, count: {c}");
@ufcpp
ufcpp / MultipleReturnBySystemTuple.cs
Created February 10, 2015 15:56
multiple return values by the System.Tuple class
public Tuple<int, int> Tally(IEnumerable<int> values) { ... }
var t = Tally(myValues);
Console.WriteLine($"Sum: {t.Item1}, count: {t.Item2}");
@ufcpp
ufcpp / MultipleReturnByDeclaredTrasportType.cs
Created February 10, 2015 16:01
multiple return values by a declared transport type
public struct TallyResult { public int Sum; public int Count; }
public TallyResult Tally(IEnumerable<int> values) { ... }
var t = Tally(myValues);
Console.WriteLine($"Sum: {t.Sum}, count: {t.Count}");
@ufcpp
ufcpp / TupleInCsharp7.cs
Created February 10, 2015 16:14
Tuple syntax in C# 7 (proposed)
public (int sum, int count) Tally(IEnumerable<int> values) { ... }
var t = Tally(myValues);
Console.WriteLine($"Sum: {t.sum}, count: {t.count}");
@ufcpp
ufcpp / TaskOfTuple.cs
Created February 10, 2015 16:24
Task of Tuple for async return values
public async Task<(int sum, int count)> TallyAsync(IEnumerable<int> values) { ... }
var t = await TallyAsync(myValues);
Console.WriteLine($"Sum: {t.sum}, count: {t.count}");
@ufcpp
ufcpp / TupleLiteral.cs
Created February 10, 2015 16:39
Tuple literals, mirroring argument lists
(int sum, int count) result = (1, 2); // 左辺の型を見て
var result = (sum: 1, count: 2); // 名前付き引数の要領で、右辺から型推論
@ufcpp
ufcpp / TupleDeconstruction.cs
Created February 10, 2015 16:51
Tuple deconstruction in the 10th Feb. proposal
var t = (sum: 1, count: 2); // タプル構築
(var sum, var count) = t; // タプル分解
(sum, count) = t; // 既存変数へのタプル分解(これを認めるかどうかは未定)