Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagec#
themeEmacs
title개선된 패턴매칭예-if문 단계를 줄일수있음
linenumberstrue
switch (message)
{
    case Cmd cmd:        
        break;
    case "snap":       
        break;
    case "print":        
        break;
}


switch (shape)
{
    case Square s when s.Side == 0:
    case Circle c when c.Radius == 0:
        return 0;

    case Square s:
        return s.Side * s.Side;
    case Circle c:
        return c.Radius * c.Radius * Math.PI;
    default:
        throw new ArgumentException(
            message: "shape is not a recognized shape",
            paramName: nameof(shape));
}

...


컴파일러및 코드 분석기 프로젝트내에서 업그레이드

Info
nuget install Microsoft.Net.Compilers

...

   # Install C# and VB compilers
nuget install Microsoft.CodeAnalysis    # Install Language APIs and Services
참고 : https://github.com/dotnet/roslyn/tree/master

NetCompilers는 이전 Framework혹은 이전 VisualStudio에게 최신 C# 언어문법을 버젼을 제공합니다.

link: https://docs.microsoft.com/en-us/dotnet/csharp/pattern-matching

닷넷 버젼 4.5.2  과 Compiler Version 2.3.1 조합이 코드 인텔리젼과 빌드에서 문제가 없어보입니다. ( vs 2015기준. 2017.09테스트 기준)

그래도 종종 빌드는 잘되는데, 인텔리젼에서 오류를 표시할때도 있습니다. 


패턴매칭은 Scala에서 훨씬이전 도입된것인데 

...

link : https://docs.scala-lang.org/tour/pattern-matching.html

개인생각 -  보통 문법이 어느 한가지 랭기지에서만 지원되면 (ex>MS-LINQ와 같은것)  사용을 보류하고 장점만 익혀둡니다.

Why? 다른 언어에 해당하는 스펙이 없으면 변환이 어려우며, 다른 언어를 사용하는 개발자와 해당 문법의 장점을

이야기할순 있겠지만 LINQ로 작성된 코드를 가지고  공통적인 이야기를 할수가 없습니다.  해당 플래폼에 고립될수가 있습니다.  

패턴매칭을 3년전 스칼라에서 처음보았을때 제가 사용하는 언어 안에서는 그러한 컨셉이 없어서 눈여겨 못보았지만,

패컨매칭은 if문을 줄이기위해 대부분의 언어에서 직접혹은 간접적으로 지원하는 컨셉인듯합니다. LINQ도 언어의 공통적인 스펙이

될지는 조금더 살펴보아야 하지만, LINQ란 이름은 아니지만 함수형언어에서 유사한 컨셉으로 사용가능한듯 보입니다.

...


실습목록

Children Display