Spokojnie, w tym poście nie będzie o kulturze osobistej programistów :). Zamiast tego będzie trochę o kulturze aplikacji i problemach/wyzwaniach z tym związanych. Jednak na początek napiszę dlaczego będzie o tym. Wydawać by się mogło, że wszyscy są świadomi kwestii narodowościowych i tego, że jeśli planujemy, naszą aplikację wypuścić w wielu regionach musimy to uwzględnić.
Wydawać by się mogło, że jest to oczywiste a jednak nadal są błędy z tym związane. Ostatnio w Unity (oficjalnie jeszcze nie potwierdzony; czekam na odpowiedź) – komponencie Dependency Injection z teamu Pattern & Practices. Jak widać nawet w tak dużym (i na pewno świadomym tych problemów) zespole taki problem się prześlizgnął. Parametry zdefiniowane w config’u aplikacji parsują używając aktualnej kultury aplikacji zamiast robić to w trybie Invariant. Przez to jeśli chcemy aplikację uruchamiać w różnych lokalizacjach (jeśli tylko ustawienia regionalne są inne np. US i Polska) – dla każdej musimy przygotować oddzielny plik konfiguracyjny.
Parsowanie z odpowiednią kulturą liczb to poważny problem. Wystarczy zerknąć na taką niewielką instrukcję.
var wartosc = double.Parse(“0.12121212”);
Jaki będzie wynik takiego parsowania? Zależy od ustawień. Na komputerze z ustawioną kulturą polską – dostaniemy wyjątek. Na komputerze w Stanach Zjednoczonych dostaniemy poprawną wartość liczbową. Specjalnie użyłem słowa poprawną, gdy wykonanie takiej instrukcji na komputerze w Danii spowoduje, że zmienna wartosc będzie zawierać…liczbę 12121212.0. Tak! Ten ułamek zamieni się w taką właśnie liczbę. Zdziwiony? Nie jesteś sam.
Musimy niestety uważać przy parsowaniu, bo nawet samo wyłapywanie wyjątków nic nie da – tu po prostu wyjątek nie zostanie rzucony.
Tak więc na zakończenie prośba. Podchodźmy ostrożnie do każdego parsowania liczb. Jeśli coś przychodzi od użytkownika, parsujmy z użyciem jego ustawień regionalnych. Natomiast wszystkie wartości nie uzyskane z UI powinniśmy przechowywać i parsować z ustawieniami InvariantCulture.
Na koniec link. Zapewne znany, ale moim zdaniem zawsze dobrze go sobie przypomnieć
Founder of Octal Solutions a .NET software house.
Passionate dev, blogger, occasionally speaker, one of the leaders of Wroc.NET user group. Microsoft MVP. Podcaster – Ostrapila.pl