必赢亚洲手机app下载


2010华夏互联网病毒木马漏杀问题研商告诉电脑软件

苹果电脑字符乱码

CommandLineApplication

苹果电脑,闲话

于挺漫长很久在此以前,电脑是命令行/终端/控制台的五洲,这屏幕上的光标在行云流水般的键盘敲击下快乐地神速着,那一行行之字符输出唰唰唰地滚动着……直到
Windows 95
的面世(这时候自己还无亮堂苹果电脑和她的操作系统),我之鼠标终于不再召灰,开首起了用武之地,然后就是是
GUI 的天下……

然世事就是这么,锦绣繁华之后便起返璞归真,大鱼大肉太多便向往点粗茶淡饭,开车开久了固然想起自行车,GUI
充斥的 Windows
的社会风气里如同为开悬挂于一阵控制台的清风。毕竟,一旦你熟练了各样指令和参数,敲键盘的快慢依旧青出于蓝了鼠标的,只是现在的人口犹太懒或者太劳碌,总是宁愿牺牲效能要非愿意失去多记一点事物。

自身个人仍然甚喜欢命令行的,尤其是长途访问一个系统的时节,一个粗略的 ssh
命令间接登录到长途 Linux,一个概括的 scp
命令就好并行传输文件,这种好、连忙是 Windows
远程桌面所不能够比的。GUI 也许是 Windows 的计划性经济学, 做啊业务还设凭
GUI。 没错,这大大降低了各个操作门槛,然则作为一个程序员,GUI
工具并非总是最佳选项,但除 GUI 工具,替代选拔并无多——直到 .NET Core
的面世。

业内的控制台程序

先是我们要发出只正经,怎么样才总算“专业的控制台程序”?

平日无论是写着玩要办事需,我还开过局部控制台程序,在开行参数的扩散、解析及推行上都比随意,类似
MyProgram abc 123 这样,MyProgram 是程序名,abc123
是参数值,内部直接用
args[0]args[1]落参数值并应用。仅此而已。时间增长了,自己尚且弄不领悟每个参数什么意思,参数有怎么样有效值,都得查源代码才了然,每个参数的逐条也要命要紧,颠倒不得。而内部贯彻达标,至少是
Main
方法里是优秀的面条式代码。总而言之,我之这些控制台程序,无论是外在,依然内在,都业余得特别。

那么一个规范的控制台程序应该是怎么的也?

宏观之拉扯新闻

当你对一个素不相识的命令行程序,或者重新当你协调2独月在此以前写的通令行程序,你心中第一反应会是什么吗?让自己估量,你的率先反响得是“这货到底怎么用?”(不要告诉我本人猜错了,我弗相信),下一个想方设法就是以此顺序会告诉自己所以法即哼了。一个正式的控制台程序一定会满足你的斯要——它可以供周密的帮助音讯。比如
git:

苹果电脑 1

暴发矣这么些帮扶音讯,大家当然信心倍增,心里暴发谱多矣。

自我期望我勾勒的控制台程序也会一鼓作气即点!

入“国际惯例”的调用格局

比方您放在心上一下 Linux
平台下之一样丛控制台程序,你相会发现她们之参数协会同调用情势充足看似,这种约定俗成的“国际惯例”分外推降低熟练各种控制台程序的求学成本。

咱俩或坐 git
为条例,从点的截图可以看,它发生充裕多之参数可用。即便依旧参数,但基于效率不一,可以分为
command, argument, option
三类。我非是控制台程序达人,对及时3接近参数的分及联络还以深深明白、学习中。最近之喻是(以
git 为例):

  • command

    一个错综复杂的控制台程序可以提供多只子命令,而 command 就象征这一个子命令

    比如 cloneinit

  • argument

    大凡一个 command 需要之参数。

    论执行 clone 的时用指定一个 repository
    的地方,这些地点便是一个 argument

  • option

    调整 command 的行为。

    随对 clone 可以扩大 --verbose 参数使其出口更详实的音信。

    平常为单薄独短横线先河后和参数誉为,比如 --verbose,对于常用的 option
    还会发生简写形式,就是一个短横线后以及简写格局的参数叫,比如 --verbose
    补助简写情势 -v,在支援里常见以 --verbose, -v 或者
    --verbose|-v 的模式说明。

    option
    可以有价吗可以没有价值,有值的时段,其赋值形式多样,常见的发因而空格的
    --branch dev,用当号的(注意等号两度没有空格)
    --branch=dev,用冒号的(冒号两限没有空格) --branch:dev

于相对简单的控制台程序,可能只有 argument 和 option 而连无包
command。

望这个出名的控制台程序,基本上也都按这套路。在即时方面,我不缅想做个怪胎,所以,我要自己勾勒的控制台程序也能以这么些“国际惯例”!

爱维护的内贯彻

当控制台程序的其中贯彻上,从前的做法至极简单粗暴,用相同堆积 if 或者
switch 配合各类 &&||
成功地成功了一如既往发端唯有“上帝”和我理解,1个月后只有“上帝”通晓的成效。随着程序参数增多、逻辑更是复杂,这么弄下去,“上帝”依旧可非常飘逸,我会被折腾大的。为了不吃自家成秃头,为了我可来还多的时间玩游戏,控制台程序的里贯彻必须井井有条、易于维护!

题材来了

叩问了一个正经的控制台程序应拥有的素质,那么接下有一个问题回在本人心久久不乐意散去……

苹果电脑 2

作一个小白,要贯彻一个发详尽表明信息、调用情势可“国际惯例”、还会优雅地处理各个参数的控制台程序何其困难?而如此套路化的物难道没有一样套成型的东西供参考吗?

苹果电脑 3

CommandLineApplication

天无绝人之路,三次等偶然的不期而遇,境遇了它们——
CommandLineApplication。假使您用 .NET Core
的语句,它能够当您构建标准控制台程序的旅途拉你同样臂的能力。

她全名是
Microsoft.Extensions.CommandLineUtils.CommandLineApplication,家已
GitHub 省 aspnet 市 Common 区 src 路
Microsoft.Extensions.CommandLineUtils 大院 CommandLine
室.即使你路盲,这里暴发个传送门

履行是考查真理的唯一标准 – MathForKids 程序

为我们从头先导,利用 dotnet cli 和 Visual Studio Code
亲自感受一下它们到底有差不多雄。我们以开创一个 MathForKids
程序,它可以遵照参数输出一些加减乘除的算式,让孩子算算结果。

MathForKids 程序的机能

  • 其仅输出算式,所以大家不用闹得最为复杂,不待什么子命令 command。

    想打听带 command 的用法,可以参照本文最终附上的
    CommandLineApplication 的合法测试代码 

  • 它们以执行之早晚用指定输出的算式是加、减、乘、除仍然立4栽运算符的构成,因而我们得安装一个
    argument: operator.

    本条 argument 能够允许以安装多独价值。

  • 她可以安装生成的数字的最为老价值与极致小值,因为它只是调整出口的算式种数字之尺寸,由此自用其由为
    options: minValue, maxValue

    minValue 的默认值是0

    maxValue 的默认值是100

  • 它们好设置生成的算式个数,这也只是调整出口结果,由此自呢用其由为
    option: count

    count 的默认值是 10

MathForKids 程序的用法

于大家看代码此前,先瞧这程序用起来应当是何许的。

只顾:在本文揭破的常,.NET Core 处于 RC 2
阶段,还未辅助编译为地点可执行文件。所以时必拔取
dotnet MathForKids.dll 来运行。图中革命下划线表示输入的指令

首先,它好提供增援音讯:

苹果电脑 4

从协理消息被大家得看来它们帮助的有所参数,并且协助参数的全写和简写,比如我们可写
--minValue 也可简写为 -min

当我们调整用她只有怪成加法和乘法,此外选项默认时:

苹果电脑 5

留意,我们同赖传入了三只参数: 加 乘

当大家安有 option 来改输出结果平时:

苹果电脑 6

顾,这里演示了下全写和简写添加 option
以及坐多种方法赋值(使用冒号、等号和空格)。

上述使用形式看起是匪是生硌“专业”的意味了?

Show me the code

以选取 CommandLineApplication 类,大家用加上对
Microsoft.Extensions.CommandLineUtils 的引用:

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true
  },
  "dependencies": {
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0-rc2-3002702"
    },
    "Microsoft.Extensions.CommandLineUtils": "1.0.0-rc2-final" //<--- add this dependency
  },
  "frameworks": {
    "netcoreapp1.0": {
      "imports": "dnxcore50"
    }
  }
}

旋即是 MathForKids 程序的本位有,表明还当诠释里:

using System;
using Microsoft.Extensions.CommandLineUtils;

namespace ConsoleApplication
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CommandLineApplication app = new CommandLineApplication();
            app.HelpOption("--help|-h|-?"); // 使其支持显示帮助信息
            app.VersionOption("--version|-v", "1.0.0"); // 使其支持显示版本信息。为了简化起见,直接返回静态的 1.0.0

            // 添加 argument,这里我们允许传入这个 argument 的多个值。
            CommandArgument argOperator = app.Argument("operator", "算式类型,有效值:加、减、乘、除,可以设置多个类型", multipleValues: true);

            // 添加多个 options,注意设置全写和简写的方式,很简单。这应该是基于约定的解析处理方式。
            CommandOption optMin = app.Option("--minValue -min <value>", "最小值,默认为0", CommandOptionType.SingleValue);
            CommandOption optMax = app.Option("--maxValue -max <value>", "最大值,默认为100", CommandOptionType.SingleValue);
            CommandOption optCount = app.Option("--count -c <value>", "生成的算式数量,默认为10", CommandOptionType.SingleValue);

            // 传入一个委托方法,当下面的 Execute 执行后会执行我们的委托方法,完成我们需要处理的工作。 委托方法需要返回一个 int,反映执行结果,一如经典的控制台程序需要的那样。
            app.OnExecute(() =>
            {
                return OnAppExecute(argOperator, optMin, optMax, optCount);
            });

            // 开始执行,把控制台传入的参数直接传递给 CommandLineApplication。
            app.Execute(args);
        }

        private static int OnAppExecute(CommandArgument argOperator, CommandOption optMin, CommandOption optMax, CommandOption optCount)
        {
            // 此处省略 100 行以以下示例取代
            List<string> operators = argOperator.Values;

            string max;
            if(optMax.HasValue())
                max = optMax.Value();

            return 0;
        }
    }
}

CommandArgumentCommandOption 的以很是简单,有 HasValue
Value 等措施好断定与取值。

不无代码放在自己之
GitHub 里。

官方的测试类呢是一个老大好之参考资源。

相关文章

No Comments, Be The First!
近期评论
    功能
    网站地图xml地图