Month: November 2015

Żeby do czegoś dojść …

Posted on

Jeśli chodzi o bycie naprawdę dobrym Developerem (Ninja, Wymiatacz, etc) bez stosowania się do tego treściwego przesłania się nie obędzie.

a to trochę rozszerzona (choć w połowie już nuży) wersja:

Null-coalescing (??) operator działa też dla typów nullable

Posted on Updated on

Metoda pobierająca ale też od razu cachująca jakieś dane mogłaby wygladać tak:

private CustomerData _data; // assigned null by default

public CustomerData Data
{
    get
    {
        // Retrieve data that is expensive to get only at first contact
        _data = _data ?? GetValue(); 

        return _data;
    }
}

Korzystamy z operatora ?? który zwróci albo vartość po lewej stronie (gdy jest ona nie nullem) albo wartość po prawej stronie (gdy ta po lewej jest nullem).

Czy typy nullable (double?) też tak można skracać? Kiedyś napisałbym tak:

private double? _value;

public double Value
{
    get
    {
        if (!_value.HasValue)
        {
            _value = CalculateValue();
        }

        return _value.Value;
    }
}

Teraz jednak wiem że operator ?? zadziała też tutaj:

private double? _value;

public double Value
{
    get
    {
        _value = _value ?? CalculateValue();

        return _value.Value;
    }
}

Jak castować na właściwy Enum

Posted on

Napiszę jak to robię bo .NET udostępnia parę fajnych rzeczy do tego.

Głównie chodzi o parsowanie ze stringa.

FileMode fileMode = (FileMode)Enum.Parse(typeof(FileMode), stringValue, true);

Trzeci argument nazywa się ignoreCase i zazwyczaj ustawiam na true czyli wielkość liter nie muszi się zgadzać, żeby zwrócić właściwy enum.

Jeśli może się nie powieść to korzystam z analogicznej funkcji TryParse()

FileMode fileMode;
if (Enum.TryParse(stringValue, true, out fileMode))
{
    return fileMode;
}
else
{
    // ..
}

Najczęściej wrzucam do projektów coś na wzór tych rozkmin z StackOverflow:
http://stackoverflow.com/questions/16100/how-do-i-convert-a-string-to-an-enum-in-c/16104#16104
http://stackoverflow.com/questions/79126/create-generic-method-constraining-t-to-an-enum/79903#79903

public class EnumHelper
{
    public static TEnum GetEnumFromString<TEnum>(string value) where TEnum : struct, IComparable
    {
        if (!typeof(TEnum).IsEnum)
        {
            throw new ArgumentException(string.Format("{0} must be an enumerated type", typeof(TEnum).FullName));
        }

        return (TEnum)Enum.Parse(typeof(TEnum), value, true);
    }
}

Nieużywane argumenty lambd

Posted on

ScrollView.ViewForZoomingInScrollView += x => PageImageView;

Jest tutaj nieużywany argument. Gdyby był potrzebny i wyglądało to np tak:

ScrollView.ViewForZoomingInScrollView += x => PageImageView(x);

to wszystko byłoby w porządku. Jeśli jednak mamy taki nieużywany możemy go sprytnie ominąć korzystając z podkreślenia (podłogi)

ScrollView.ViewForZoomingInScrollView += _ => PageImageView;

Dzięki temu od razu widzimy, że ten argument jest nieistotny i czytając nie musimy się na nim skupiać.

string.Join() używa StringBuildera pod spodem

Posted on Updated on

Jak w tytule. string.Join oraz string.Concat(IEnumerable) używają pod spodem StringBuildera, więc nie trzeba go explicite używać. Poniżej kod który można złączyć za pomocą StringBuildera (jak bym kiedyś zrobił) oraz string.Concat (czyli jak teraz dla czytelności będę robił).

var names = new[] { "john", "james", "robin" }; // and many, many more

// This is how I was doing it by always default
var sb = new StringBuilder();
foreach (var name in names)
{
    sb.Append(name);
}

var result = sb.ToString();

// This is better cause of readability
var result2 = string.Concat(names);

Całkiem krótki artykuł tłumaczący też inne zagwozdki z łączeniem stringów: Concatenating Strings Efficiently

The Way Forward Source – po konferencji

Posted on

Byłem (5 listopada 2015) na http://source.twf.community/

Rzeczy które wyciągnąłem z niej:

* Augmented Reality, Virtual Reality – zainteresować się silnikami 3D. Silniki Unity albo Unreal. W Unreal Engine pisze się w C++ i można naprawdę dopieścić to co się robi. Unity jest prostsze na początku ale nie jest takie wyrafinowane. Ja zajął bym się raczej Unity, ponieważ można programować w C# lub JavaScript i działa na wiele (wszystkie sensowne?) platformy.
* Oculus Rift czyli okulary dzięki którym widzimy w 3D można się oglądać na boki. Grałem dłuższą chwilę w symulator paralotni – było super choć bardzo proste to było – pograłbym jeszcze.
* Michał Taszycki (@mehowte) pokazywał jak można programować na Commodore 64. Najbardziej jednak się ucieszę gdy zrobi zapowiadane krótkie filmik wprowadzające do VIMa.
* może skorzystać kiedyś w praktyce z modelu aktorów (Akka itp).