인사를 돌려주는 앱을 만들어 보았습니다.

소개



2017년경에 C#...라고 하는 것보다 Visual Studio 프로그래밍의 재활 목적으로 「인사를 돌려주는 어플」을 만들어 보았다…

당시 하고 싶었던 일


  • HelloApp.exe를 인수없이 지정하면 아무 것도 표시되지 않습니다.
  • HelloApp.exe에 끌어서 실행하면 「Hello. {인수에 넣은 이름}씨!」라고 표시한다.

  • 프로젝트 개요




    1
    2


    프로젝트 템플릿
    콘솔 앱(.NET Framework)

    프로젝트 이름
    HelloApp

    프레임워크
    .NET Framework 4.7.2


    첫 시도



    프로그램 거동


  • helloman.exe를 실행하면 「Hello.타로씨!」라고 인사한다.
  • 인수로 이름을 지정하면 「타로」가 「지정한 이름」을 대신해, 인사한다.

  • 잘못된 코드



    program.cs
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Halloman
    {
        class Program
        {
            static void Main(string[] args)
            {
                string yourname;
                if (args.Length > 0) //引数が指定されていればyournameに代入
                {
                    yourname = args[0];
                }
                Hello(yourname);
            }
    
            // 挨拶を表示する処理
            private static void Hello(string name)
            {
                Console.WriteLine("Hello. {0}さん!", name);
            }
        }
    }
    

    집어 넣은 곳



    Visual Studio에서 빌드 오류가 출력.





    할당되지 않은 로컬 변수 yourname을 처리 할 수 ​​없다고 말했기 때문에, 빌드 처리 = 컴파일을하기위한 조건이 갖추어지지 않았다고 오해한 채, 우선 미할당 변수를 어떻게든 하면 좋을까라고 텍토로 진행 버렸다. .

    받은 조언





    고민하고 있는 곳(부족한 지식)은 거기가 아니라고 어드바이스를 받지만, 당시 여러가지 한계를 넘고 있었기 때문에 「푹할 정도(잘 모르는)」상태.
    텍토 수정을 실시해, 에러 회피해 무리하게 움직이는 것으로 해 버렸다.

    텍토 수정


    static void Main(string[] args)
    {
      string yourname = "太郎";
      if (args.Length > 0) //引数が指定されていればyournameに代入
        {
          yourname = args[0];
        }
      Hello(yourname);
    }
    

    뭐 미할당 변수의 에러를 회피할 수 있게 되었으므로 디버그 빌드 처리는 진행되었다.

    교환



    프로그램의 거동을 다시 생각했다.



    인수를 지정하지 않은 경우, 복수 인수를 지정하고 있었을 경우 등의 케이스가 전혀 만들어지지 않았기 때문에 처리를 추가.
  • HelloApp.exe를 인수없이 지정하면 아무 것도 표시되지 않습니다.
  • HelloApp.exe에 인수를 1개 지정해 실행하면 「Hello. {인수에 넣은 이름}씨!」라고 표시한다.
  • HelloApp.exe에 복수의 인수를 지정해 실행하면 「Hello. {인수에 넣은 이름}씨!」를 인수로 지정한 수의 분만 표시한다.

  • 첫 번째 리노베이션



    돌진 커녕은 있지만, 개수 도중의 임시도 기재하고 있기 때문에, 여기에 대해서는 스루 해 주실 수 있으면 고맙다.
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace HelloApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                if (args.Length == 0)
                {
                    ReturnError("挨拶する相手の名前がわかりません。");
                }
    
                if (args.Length > 0)
                {
                    string yourname;
                    for (int ti=0; ti<args.Length; ti++)
                    {
                        yourname = args[ti];
                        SayHello(yourname);
                    }
                }
    
            }
    
            // 挨拶を表示する処理
            private static void SayHello(string name)
            {
                Console.WriteLine("Hello. {0}さん!", name);
            }
    
            private static void ReturnError(string message)
            {
                Console.WriteLine(message);
            }
        }
    }
    

    두 번째 리노베이션



    아무래도 낭비가 많기 때문에 처리의 생각을 바꾸어 보았다.
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace HelloApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 挨拶を返す処理はMainに書かずに関数に書くようにした
                if (args.Length == 0)
                {
                    Console.WriteLine("挨拶する相手の名前がわかりません。");
                } else
                {
                    SayHello();
                }
            }
    
            // 挨拶を表示する処理
            private static void SayHello()
            {
                string[] yourname = System.Environment.GetCommandLineArgs();
    
                for (int ti = 1; ti < yourname.Length; ti++)
                {
                    Console.WriteLine("Hello. {0}さん!", yourname[ti]);
                }
            }
        }
    }
    

    요약



    지금 생각해 보면 반성 점 많다 ·
  • 거동의 패턴에 누설이 없는가?
  • 함수화한다면 나름대로 처리를 정리합시다

  • 사과



    또, 다시 시작하기 전의 기사를 실수로 갱신해 버렸기 때문에 스쿠쇼를 이월하는 형태로 했습니다.
    gentaro 미안해.

    참고


  • 명령 줄 인수 (C# 프로그래밍 가이드) htps : // / cs. mic로소 ft. 코 m / 쟈 jp / t t t / c 샤 rp / p 로그 라민 g-gui / 마인 - an d 코 맨 d rgs / 코 맨 d ぃ 네 - ar kumen ts
  • Environment.GetCommandLineArgs 메서드 htps : // / cs. mic로소 ft. 이 m / 그럼 jp / t 네 t / 아피 / sys m. 엔 ゔ 로멘 t. Get t Dd 네, rgs?ゔ ぃ w = 네 t 이것 3.1
  • 좋은 웹페이지 즐겨찾기