⭐ 0.4 开始之前¶
新建一个项目¶
为了完成接下来的几个任务,我们需要新建一个C#控制台应用(Console App)项目。还记得如何操作吗?
- 在Visual Studio中:
- 选择“文件”-“新建”-“项目”
- 选择带有C#标签的控制台应用模板
- 设置项目名称和文件位置
- 选择.NET版本
- 在Visual Studio Code中:
- 按 Ctrl+Shift+P
- 输入 > 并选择
.NET: 新建项目 - 选择控制台应用
- 设置项目名称
- 设置项目文件位置
如果一切顺利,我们就得到了一个 Program.cs 文件,里面是hello world代码:
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
为什么是“Hello, World!”
Program.cs 文件中,会默认出现输出“Hello, World!”的示例代码。
自1978年的《C程序设计语言》首次把输出“Hello, World!”的代码作为入门案例以来,几乎所有程序设计语言都把hello world作为示例代码。
注释:代码的草稿纸¶
注意到这里有两行代码。其中第一行以两个斜杠 // 开头。这表示: 从双斜杠开始,直到这一行的末尾 的信息都只是给阅读这段代码的人看的,而不会参与编译或执行。这就是“代码注释”。
源代码不只是给编译器看的,写代码或读代码的开发者也需要检查和理解。所以你可以利用代码注释,在你的代码旁边写下:这段代码的功能、需要改进的地方以及其他任何事情。特别是在团队合作开发的时候,留下清晰且必要的注释可以帮助其他成员理解你的意图,提高开发效率。再者,即使你是独立开发者,谁又能保证不会忘记自己几个月前灵光一现写下的代码到底是什么意思呢。
因此,不要吝啬注释,反正它又不会让你的程序变慢。
刚刚我们提到,被注释掉的代码不会参与编译或执行。因此,注释的另一个妙用就是——让一部分代码不起作用。
当你不确定一段代码是否需要保留时,你可以这么做:把这段代码剪切掉,然后尝试启动调试;你觉得还是加上它比较好,然后在原来的位置上重新粘贴。但你也可以这样做:把这段代码注释掉,进行调试,然后取消注释,再调试。这样显然更方便管理。下面就让我们尝试一下,把第2行代码变成注释。
你的代码和上面展示的一样吗?按下 F5 ,你会发现“Hello, world!”字样消失了。第2行代码的作用正是显示“Hello, world!”这行字,而你刚刚把它变成注释了,所以它不起作用了。如果把第2行前面的双斜杠删除,再次启动调试,那么“Hello, world!”就又会显示了。
双斜杠符号的注释范围是从它开始,直到这一行的末尾。如果你想要由你来指定注释结束的位置,请使用 /* 和 */ 符号。其中 /* 表示注释开始, */ 表示注释结束。你可以在同一行中使用这两个符号,也可以跨多行使用,就像下面这样,非常灵活:
合理使用换行
我在第3行空了一行,让代码看起来没那么挤。和注释一样,合理使用空行也能增加代码的可读性。(就像写文章时划分自然段一样)
在第1行的注释里,甚至含有一个网址(下划线的部分)。这意味着你可以在注释里面写上一个网址,它会被自动识别并画上下划线,然后你可以按住 Ctrl 的同时点击它,就可以在浏览器中打开了。注释里还可以包含emoji表情等等。
在控制台查看输出¶
今天的我们是如何使用计算机的?使用鼠标点击屏幕上的图标,就可以在琳琅满目的各种应用程序、网页之间穿梭。
但是,在这一切被发明以前的计算机是怎么使用的?是在一个黑色的窗口上用键盘输入文字,然后观察计算机的输出,这个窗口就叫做 控制台 。
而你已经见过控制台了——当你按下 F5 启动调试以后,出现的显示“Hello, world!”和一些文字的窗口正是控制台。对于Visual Studio用户,看见的是一个弹出的窗口。而Visual Studio Code的用户可能是在屏幕下方的一个区域看见输出的结果,这是因为Visual Studio Code默认使用集成的终端。
对于今天的Windows用户和Mac用户来说,其完善的图形用户界面让我们几乎感受不到通过字符进行输入输出的控制台的存在了。以至于在一些人眼中,这个黑色的窗口已经成为了“电脑坏了”或者“黑客”的象征。
但是,在学会为我们的应用程序建立图形化的界面之前(如果需要的话),我们可能还要忍受(相当长一段时间的)无聊的控制台输入输出。
现在我们来看这行代码,试着猜测一下它的含义:
Console是控制台的意思,Write是写,Line是行。括号里面的Hello, World!正是待会要在屏幕上出现的文字。末尾的分号 ; 表示这一句代码结束了,相当于说完一句话之后的句号。那么,你能猜到他们连起来是什么意思吗?
- “在控制台里,写这么一行文字:Hello, World!。”
就是这样!请注意,输出的其实是双引号内的文字(是英文的引号 " 哦),而不包含双引号本身,原因将在下一章揭晓。现在到了发挥你的创意的时候了!把Hello, World!改成任何你想要的文字吧!看看我做的:
这段代码将输出一个小小的由 * 组成的菱形图案。你可以使用更多的 Console.WriteLine() 语句来生成诸如爱心、五角星等图案!
注意大小写
敬请注意:C#是 区分大小写 的。请观察上面说到的代码中 Console 的 C 还有 WriteLine 的 W 和 L 是大写的,不要写成小写。否则编译器识别不了,会引发“未包含XXX的定义”之类的错误。
我们已经知道了 WriteLine 是“写一行文字”的意思。而这个“一行”指的其实是在这段文字的末尾 换行 ,这样接下来的其他内容就会在下一行开始。那我们把“一行” Line 去掉会怎么样呢? 试一下以下代码:
Tip
在输入以下代码之前,可以使用代码注释来让编译器忽略 Program.cs 文件中已经有的其他代码,从而避免其他内容干扰你对输出结果的观察。
输出结果是不是 AAABBB ?这说明 Console.Write() 只是写文字,而不会在文字的末尾换行!后面的文字会在它的末尾接着输出。
“打印”的由来
如果你接触过其他编程语言例如Python或C,你可能还记得它们输出字符的方式: print() 或者 printf()。为什么是“打印”字符?我的打印机明明没有被启动!
这是因为在没有显示屏的年代,计算机的输出确实是通过打字机打印在纸上查看的(输入则是通过键盘)。虽然现在我们有了显示屏,但是打印这个词依然保留了下来。尽管C#使用的是Write这个词,但如果你看到“打印在屏幕上”之类的话,就不用感到困惑了。
类似的词语还有回车,这个“车”指的是打字机的字车。打完一行字以后,把字车复位接着打下一行的动作就叫“回车”。