Wspominałem niedawno, że w pracy nie trzeba robić wszystkiego szablonowo. Można się postarać i uczyć, rozwijać siebie i innych. Nieważna jest firma, korporacja w której pracujesz. Nieważne jest stanowisko, które zajmujesz. Ważne jest tylko czy chcesz.

Dziś opiszę jak testować aplikację C# za pomocą F#. Po co to robić? To jeden z powodów. A właściwie 10 (i więcej). A oprócz tego dla przyjemności i rozwoju. Nauczenia się czegoś nowego w pracy zamiast po pracy, nadal będąc wydajnym pracownikiem. Ale… Do dzieła!

Jak ożenić F# i C#? Potrzeba nam 2 projektów jeden w F#, a drugi w C#. Teoretycznie istnieje możliwość mieszania języków w jednym projekcie, ale wymaga trochę ręcznego rzeźbienia i zabawy np. make (ręczne kompilowanie etc.). Ponieważ to tylko przykład (choć na produkcyjnym kodzie) powstrzymam się od kombinacji i zrobię to prosto. Posiadam już aplikację w C#, i to taką bardzo legacy, więc testy jako takie przyjmowane są z miłością. Stworzę więc nowy projekt w F#:

Tworzenie projektu - jak ożenić F# i C#?

Po stworzeniu projektu dodam do niego referencje. Jedna do projektu, który zamierzam testować, a druga za pomocą Nuget do NUnit (3.0.1):

Referencje - jak ożenić F# i C#

No to mamy czego potrzebujemy – czas na działanie. Do kodu!

  • Na samej górze namespace. Ponieważ testuję, czy F# działa, stąd taka nazwa (normalnie byłoby Soneta.Printer.Test).
  • Konstrukcje używające open to odpowiedniki using w C#. Trzeba otworzyć namespace lub moduł aby móc używać zawartych w nim klas czy elementów.
  • Potem tworzymy nowy moduł który posiada 1 funkcję w której tworzymy nowy obiekt klasy PrinterProcessArguments. Niestety, czego nie widzicie, kompilator podkreśla tę linijkę.
  • Na końcu jest 2, które na razie jest zwracane przez funkcję, aby kompilator nie robił dodatkowych problemów. Uwaga białe znaki mają znaczenie w F#, dlatego nie ma nawiasów – tabulator wydziela kod.

Ale co z tym błędem? Okazuje się, że kompilator ładnie podpowiada:

Soneta.Forms - jak ożenić F# i C#

Super, kompilator powiadamia mnie, jakich referencji mi brakuje. Po dodaniu brakującej referencji wszystko działa jak należy. Czas uzupełnić kod o asercję:

Teraz mamy już asercję i wszystko co jest nam potrzebne aby wykonać test. Zrobimy to za pomocą R#, aby ładnie wyglądało, choć w babunie działa to szybciej 🙂

Test Results - jak ożenić C# i F#

Dla porównania ten sam test w C#:

Prawda, że w F# ładniej i ciekawiej? Zdecydowanie fajniej się robi jak zaczyna się używać funkcji typu map itp. Dzięki takiemu podejściu możecie zgłębiać programowanie funkcyjne oraz nowe języki w swojej obecnej niekoniecznie w pełni funkcyjnej pracy. Wystarczy trochę chęci! A nuż, widelec, a może nawet talerz, spodoba się to wszystkim i zaczniecie próbować nowych rzeczy i sposobów na rozwiązywanie problemów za pomocą innych narzędzi niż w kółko C# i .NET. Do czego serdecznie zachęcam.

 

 

11 Replies to “Jak ożenić F# i C#

  1. Pingback: dotnetomaniak.pl
      1. Dziękuję serdecznie 🙂 Ja do tej pory szukałem skórek podobnych do ciemnej VS by mieć wszędzie te same. Muszę wypróbować tą bo chyba jest bardziej popularna.

  2. Ach ach Soneta… 🙂
    Ciekawy wpis. Spróbuję użyć tego przy MVC.
    Zaiste, Solarized Dark to świetny motyw, używam także w NP++.

    1. Znasz Sonetę? Tak, motyw jest świetny, choć kolega wczoraj mówił, że się szybko wyleczył i przeszedł na solarized light. Ja używam ich zamiennie w zależności od przyciemnienia w pokoju.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *