Merge pull request #22574 from turbokernel/Write-good-examples-by-starting-with-real-code

Reviewed Write good examples by starting with real code
This commit is contained in:
Xingyu.Wang 2021-07-16 11:45:07 +08:00 committed by GitHub
commit 817a18c074
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -3,18 +3,18 @@
[#]: author: "Julia Evans https://jvns.ca/" [#]: author: "Julia Evans https://jvns.ca/"
[#]: collector: "lujun9972" [#]: collector: "lujun9972"
[#]: translator: "zepoch" [#]: translator: "zepoch"
[#]: reviewer: " " [#]: reviewer: "turbokernel"
[#]: publisher: " " [#]: publisher: " "
[#]: url: " " [#]: url: " "
从实际代码开始编写好的示例 从实际代码开始编写好的示例
====== ======
我写关于编程的事情时,我花费了大量时间在生产好的示例上。我从未见过有人写过关于如何写出好的示例,所以我就写了一下如何写出一份好的示例。 编写程序时,我花费了大量时间在编写好的示例上。我从未见过有人写过关于如何写出好的示例,所以我就写了一下如何写出一份好的示例。
最基础的就是你真的去写代码,然后删除不相关的细节,使其成为一个自成一体的例子,而不是无中生有地想出一些例子。 基础思路就是从你写的真实代码开始,然后删除不相关的细节,使其成为一个独立的例子,而不是无中生有地想出一些例子。
我将会谈论两种示例:实例和令人惊讶的例子 我将会谈论两种示例:基于真实案例的示例和奇怪的示例
### 好的示例是真实的 ### 好的示例是真实的
@ -25,10 +25,10 @@ numbers = [1, 2, 3, 4]
squares = map(lambda x: x * x, numbers) squares = map(lambda x: x * x, numbers)
``` ```
我觉得这个示例不真实的,有两方面的原因: 我觉得这个示例不真实的,有如下两方面的原因:
* 将一组数字作平方运算不是你想要在真正的程序中完成的事,除非是项目 Euler 或某种东西(也有很多其它的更有可能的操作系统 * 将一组数字作平方运算不是在真实的程序中完成的事,除非是项目 Euler 或某种东西(更多的可能是针对列表的操作
* `map` 在 Python 中并不是很常用,即便是做这个我也更愿意写 `[x*x for x in numbers]` * `map` 在 Python 中并不常用,即便是做这个我也更愿意写 `[x*x for x in numbers]`
一个更加真实的 Python lambdas 的示例是使用 `sort` 函数,就像这样: 一个更加真实的 Python lambdas 的示例是使用 `sort` 函数,就像这样:
@ -37,11 +37,11 @@ children = [{"name": "ashwin", "age": 12}, {"name": "radhika", "age": 3}]
sorted_children = sorted(children, key=lambda x: x['age']) sorted_children = sorted(children, key=lambda x: x['age'])
``` ```
但是这个示例是被精心设计的(为什么我们需要按照年龄对这些孩子进行排序呢?)。所以我们如何来做一个真实的示例呢? 但是这个示例是被精心设计的(为什么我们需要对这些孩子按照年龄进行排序呢?)。所以我们如何来做一个真实的示例呢?
### 如何让你的示例真实起来:看你写实际代码 ### 如何让你的示例真实起来:看你写实际代码
我认为最简单的来生成一个例子的方法就是,不是凭空出现一个例子(就像我用那个`儿童`的例子),而只是从真正的代码开始! 我认为最简单的来生成一个例子的方法就是,不是凭空出现一个例子(就像我用那个`儿童`的例子),而只是从真正的代码开始!
举一个例子吧,如果我要用 `sort.+key` 来编写一串 Python 代码,我会发现很多我按某个标准对列表进行排序的真实例子,例如: 举一个例子吧,如果我要用 `sort.+key` 来编写一串 Python 代码,我会发现很多我按某个标准对列表进行排序的真实例子,例如:
@ -50,19 +50,18 @@ sorted_children = sorted(children, key=lambda x: x['age'])
* `sorted_keysizes = sorted(scores.keys(), key=scores.get)` * `sorted_keysizes = sorted(scores.keys(), key=scores.get)`
* `shows = sorted(dates[date], key=lambda x: x['time']['performanceTime'])` * `shows = sorted(dates[date], key=lambda x: x['time']['performanceTime'])`
在这里很容易看到一个规律——这些大都是按时间排序的!因此,您可以明白如何轻松地将按时间排序的某些对象(电子邮件、事件等)的简单实例放在一起。 在这里很容易看到一个规律——这些基本是按时间排序的!因此,您可以明白如何将按时间排序的某些对象(电子邮件、事件等)的简单实例轻松地放在一起。
### 现实的例子有助于"推销"你试图解释的概念 ### 现实的例子有助于"布道"你试图解释的概念
当我试图去解释一个想法(就好比 Python Lambdas的时候我通常也会试图说服读者说这是值得学习的想法。Python lambdas 是如此的有用!当我去试图说服某个人 lambdas 是很好用的时候,让他想象一下 lambdas 如何帮助他们完成一项他们将要去做的任务或是以及一项他们以前做过的任务,对说服他会很有帮助。 当我试图去解释一个想法(就好比 Python Lambdas的时候我通常也会试图说服读者说这是值得学习的想法。Python lambdas 是如此的有用!当我去试图说服某个人 lambdas 是很好用的时候,让他想象一下 lambdas 如何帮助他们完成一项他们将要去做的任务或是以及一项他们以前做过的任务,对说服他会很有帮助。
### 从真实代码中提炼出示例可能需要很长时间 ### 从真实代码中提炼出示例可能需要很长时间
The example I just gave of explaining how to use `sort` with `lambda` is pretty simple and it didnt take me a long time to come up with, but turning real code into a standalone example can take a really long time!
我给出的解释如何使用 `lambda``sort` 函数的例子是十分简单的,它并不需要花费我很长时间来想出来,但是将真实的代码为一个独立的示例则是会需要花费很长的时间 我给出如何使用 `lambda``sort` 函数的解释例子是十分简单的,它并不需要花费我很长时间来想出来,但是将真实的代码提炼出为一个独立的示例则是会需要花费很长的时间
举个例子,我想在这篇文章中融入一些奇怪的 CSS 行为的例子来说明创造一个怪异或令人惊讶的案例是十分有趣的。我花费了两个小时来解决我这周遇到的一个实际的问题,确保我理解 CSS 的实际情况,并将其变成一个迷你的示例。 举个例子,我想在这篇文章中融入一些奇怪的 CSS 行为的例子来说明创造一个怪的案例是十分有趣的。我花费了两个小时来解决我这周遇到的一个实际的问题,确保我理解 CSS 的实际情况,并将其变成一个示例。
最后,它“仅仅”用了[五行 HTML 和一点点的 CSS][1] 来说明了这个问题,看起来并不想是我花费了好多小时写出来的。但是最初它却是几百行的 JS/CSS/JavaScript它需要花费很长时间来将所有的代码化为核心的很少的代码。 最后,它“仅仅”用了[五行 HTML 和一点点的 CSS][1] 来说明了这个问题,看起来并不想是我花费了好多小时写出来的。但是最初它却是几百行的 JS/CSS/JavaScript它需要花费很长时间来将所有的代码化为核心的很少的代码。
@ -70,10 +69,10 @@ The example I just gave of explaining how to use `sort` with `lambda` is pretty
### 就这么多了! ### 就这么多了!
我觉得关于示例还有更多可以去讲的——我觉得还有几个不同类型的有用示例,例如 我觉得还有更多关于示例可以去讲的——几种不同类型的有用示例,例如:
* 可以更多的改变人的思维而不是直接提供使用的代码的让读者感到惊喜的示例 * 可以更多的改变人的思维而不是直接提供使用的惊喜读者的示例代码
* 易于复制粘贴以用作起点的示例 * 易于复制粘贴以用作初始化的示例
@ -86,7 +85,7 @@ via: https://jvns.ca/blog/2021/07/08/writing-great-examples/
作者:[Julia Evans][a] 作者:[Julia Evans][a]
选题:[lujun9972][b] 选题:[lujun9972][b]
译者:[zepoch](https://github.com/zepoch) 译者:[zepoch](https://github.com/zepoch)
校对:[校对者ID](https://github.com/校对者ID) 校对:[turbokernel](https://github.com/turbokernel)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出