让我们像专业人士一样快速编码


给我一个杠杆,支点,腿部空间和加固胶带



即使您尝试,也无法简洁地描述无底兔子洞在等着您。 这是一种罕见的情况,为了意识到所要讨论的内容,必须听完语音直到最后。 在研究了本手册中的步骤之后,每个人都会为自己找到一些东西:深奥的“文本”编辑器Leo Editor本质上要求以最惊人的方式使用它。




目录内容


  1.序言.................................................. 2 
  2.安装Leo Editor ..................... 2 
  3.设置.............................................. 4 
  4.了解界面....................... 7 
  5.创建外部文件................. 14 
  6.使用命名节........ 18 
  7.贪婪的包容........................ 21 
  8.简单的魔法...................... 24 
  9.狼人的反面... 30 
  10.可视化........................ 33 
  11.内容和形式................................ 36 
  12.我将为自己构建一个IDE ................................... 39 
  13.思想自由.................................... 49 
  14.万岁,结束.................................... 58 
  15. UPD。 应用实例................. 58 




序言


当您使用任何编程语言编写程序时,Smalltalk总是会严重短缺类浏览器,无休止地让人感到您的双手被绑住,双腿潮湿。 碰巧的是,您经常在Internet上查找一件事,却发现完全不同的事物,但它是如此美丽,以至于在不断发展的视野中迷失了开始搜索的原因。 搜索短语“ python类浏览器”会产生大量垃圾,但是一颗未切割的钻石躺在这座山上,朦胧地闪闪发光,没有引起广泛的兴趣,等待着细心的眼睛和好奇的头脑注意到并捡起它。



安装Leo编辑器


该项目是跨平台的,为Windows平台提供了安装过程。 要启动编辑器,您需要Python和Qt库。 对于没有准备好遭受痛苦的用户来说,所描述的安装选项是最简单的,专业人员可以自行决定采取行动。

安装Miniconda python程序员工作区管理器。 该解决方案使您能够严重降低获取南瓜而不是正确连接组件的能力,并且在出现任意死锁的情况下,可以轻松回滚到零状态并快速切换到测试其他调整选项。

下载页面,我们下载 Python 3.7 Miniconda3 Windows 64位安装程序。 我们设置何时出现有关复选标记的问题,同时激活两个。

接下来,运行命令行(键[Win + R],“ cmd”和[Enter])。 我们输入:

conda 

返回图片

没有错误,可以直接访问conda。 我们检查所需语言执行程序版本的可用性:

 python -V 

返回图片

当场。

我们看一下可以安装哪些版本的编辑器:

 pip install leo== 

我们更喜欢数字中不包含字母的最新版本:

 pip install leo==6.1 

完成下载,解压缩和安装后,我们会碰碰运气:我们启动python解释器,连接到编辑器的组件,启动编辑器

 python >>>import leo >>>leo.run() 

返回图片



客制化


如果启动快捷方式未出现在桌面上,请自行添加:

编辑器启动器的路径: %USERPROFILE%\ Miniconda3 \ Scripts \ leo.exe
图标路径: %USERPROFILE%\ Miniconda3 \ Lib \ site-packages \ leo \ Icons \ SplashScreen_trans.ico

返回图片

我不太喜欢原生视觉主题的外观,因此必须自己制作。 要使用它,您必须首先下载它 。 无病毒1000%。 python.py文件是用于区分python语法元素的颜色的描述。 必须将它放在%USERPROFILE%\ Miniconda3 \ Lib \ site-packages \ leo \ modes \中 ,并替换先前的文件。 为了让您投降python语言,稍后会变得更加清楚。 存档中的其余文件必须复制到%USERPROFILE%\ Miniconda3 \ Lib \ site-packages \ leo \ themes \文件夹中。

现在,您需要在用户设置中启用主题。

返回图片

单击@settings元素,然后使用[Insert]键添加一个新的嵌套元素。 粘贴文字:

 @string theme-name = monokai.leo 

要保存更改,请按[Enter]。 如果不经意地禁用了编辑元素名称的操作,则可以通过双击元素或按组合键[Ctrl + h]来启用它。

返回图片

重新开始保存更改。

返回图片

与“ .leo”文件的关联应该自动发生,但是如果没有关联,那么我们将使用内置解决方案。

返回图片

直到最近,如果不进行修改,这是行不通的,现在,它们已经修复了,好象呵呵。



了解界面


返回图片

乍一看,我们面前有一个普通的结构化文本编辑器(英语大纲编辑器,大纲概述),是许多人钟爱的树状目录的克隆版本(不幸的是,由于开发人员的财务问题,该网站的离线文档已被禁用)。 实际上,有一棵树,并且存在一个用于输入属于所选树节点的文本的区域。 带有简单名称Tabs的多功能区域,除了日志外,还可以得出其他有用的信息,让我们从搜索文本开始。

返回图片

这似乎是一种定型观念,但是有些怪异,建议您按键盘上的按键,而不是屏幕上的按钮。 并且find-all命令根本没有分配的键。 现在所有的注意力都在窗口的最底部。

返回图片

Tru-geeks一定已经on了啤酒。 是的,这是从emacs直接借来的。 可以使用内置命令行启动大多数编辑器操作。

返回图片

返回图片

返回图片

所有出现的单词“ the”的搜索结果将显示在故意创建的新树节点中。 集体农场! (不必担心,像健康的叔叔一样,逐元素搜索会“遍历”检测到的事件)。

返回图片

青春,不要分散! 有必要摇动入睡的水泡。 您总是可以绕过这个暗区Leo Editor的边缘。 该程序看起来很像Linux:热情,各种发烧友为自己完成的一切工作,都需要经过深思熟虑的研究,一个的性能与另一个的实现不同,发现有人放置但没有真正描述的新芯片总是令人惊讶的,并且尽管如此,冰山的一角很舒适,就在上面,如果您不愿冒险,就不能陷入阴暗的深渊。

返回图片

标签区域允许您将标签分配给节点,然后再使用它们。 显然是用来增加新的维度到混乱秩序的深度。 我们选择节点,编写标签标识符,然后单击“ +”。 我们选择另一个节点,只需在其上按“ +”,将分配活动标签。 我们选择第三个节点,输入“ Schmucker”,然后按“ +”。 当前,我们有两个带有标签“ zutsker”的节点和一个带有标签“ shmutsker”的节点。

返回图片

从标签列表中选择一个标签会导致一个与标签相关联的节点列表,其中包含您可以浏览的名称。 为了从节点中选择标签,请右键单击它。

返回图片

接下来是极为有用的Nav面板。 它有助于快速忽略出现某个单词的节点。 由于维护.leo文件的方式与组织的高度混乱,因此通过搜索导航适合应用程序的自然循环。

返回图片

结构化文本的编辑者的普遍用途是积累个人知识库。 第二个最常见的用途是维护任务列表。 下一个标签有助于使该过程具有优先级,截止日期和实施状态。

返回图片

节点的上下文菜单允许您使用“任务”选项卡的大部分功能。

返回图片



创建外部文件


如何自行编辑文本和使用树将很容易,所以我们将深入探讨将抽象转移到现实世界的无限可能性。 创建一个新文件。

返回图片

单节点NewHeadline的名称更改为@file 1.txt

返回图片

在节点的内容中添加一些文本。

返回图片

将.leo文件保存在某处。 打开.leo文件所在的文件夹。 我们注意到那里1.txt。 我们打开它。

返回图片

我们建造了什么? 我们配置了将.leo文件的节点之一导出到外部文件的配置。
我们的文字周围有什么垃圾? 当您将文件重新加载到Leo编辑器中时,允许您重新创建结构的元数据,如果要在外部的某个地方修改文件,这是必需的。 可以将Leo Editor源代码中的大多数python文件拖放到编辑器中,并发现它们包含对结构的描述:

返回图片

但是,如果我们根本不需要反向上传功能,但是相反地希望文件不包含多余的字节,则可以通过将@file指令替换为@file-nosent (没有哨兵)来实现。

返回图片

将更改保存在.leo文件中后,外部文件将自动更新。

返回图片



使用命名部分


每个节点都是一个单独的独立实体,默认情况下,它不具有有关其邻居的信息。 如果我们尝试将新结构添加到附加到外部文件的节点上,然后单击“保存”,则会发生错误。

返回图片

我们收到两个问题的通知:

  1. 我们有一个“测试”节点悬在空中(相对于外部文件,因为.leo结构内部有一个节点,但是我们没有指出应如何将其添加到外部文件中,因此会出现错误)。
  2. 在解决悬挂节点的问题之前, @file-nosent 1.txt内部的其他更改都不会保存到磁盘。

在节点之间添加链接的第一种方法是通过部分。 节名称的特殊格式如下所示:

 <<my_name>> 

这使您可以将嵌套节点声明为命名节,必须在要放置从属节点内容的外部节点的位置指定相同的名称。

返回图片

返回图片

结果文件:

返回图片

在真实文件中的同一示例中,外部依赖项的import部分显式分配给单独的节点。

返回图片



贪婪包容


但是,如果我们想在嵌套部分中构建一个嵌套部分并在其中放置另一个部分,该怎么办? 您可以天真地采取行动:

返回图片

但是对于这种自然的需求,有多达两个指令: @all@others

@all指令无味地连接所有嵌套节点的文本。

返回图片

当然,这完全取决于您在输出中所需的文件格式,但是您可能会喜欢@others指令@others ,它允许您以期望的形式实现设计的结构。 渴望的选择:

返回图片

用关键字包装部分:

返回图片

缩进格式:

返回图片

怎么了 它开始成形了吗? 我们几乎没有真正的乐趣。 :: ::



简单的魔术


最后,我们开始编写代码。 该任务将很愚蠢,但包含有用程序的典型基本元素。 在现有文件或新文件中的任何位置创建一个新节点。 第一行指示@language指令以启用代码突出显示。 如果在文件夹USERPROFILE%\ Miniconda3 \ Lib \ site-packages \ leo \ modes \ no下以突出显示的语言显示,则没有人禁止自己添加它。

返回图片

假设我们要处理的信息是由平板存储在csv文件中的。

我们需要:计算在计数列中找到的字符“ 0”的数目

我们必须:

  1. 将文本转换为样本数据结构
  2. 用计数执行迭代

返回图片

我们根据开发的算法对程序进行分解。 读取文件后的第二步,将文本分成几行。 第一步是移至“读取”从属节点。

返回图片

接下来,创建一个与表中数据相对应的字典数组。 该节点在上层。

返回图片

最后一步。

返回图片

同时,生成的main.py文件将在磁盘上形成。

返回图片

万岁,我们很棒。 但是突然之间,我们就产生了一个难以理解的愿望:要计算同一csv文件中的有效行数。 没问题,请在主节点上执行copy.paste,更改输出文件的名称,修改最后一步的代码。 我们得到结果。

返回图片

在这里,我们的喜悦变成了悲伤,因为CSV文件的名称可能会有所不同,这意味着,如果我们在一个程序中对其进行更正,那么在第二个程序中,我们肯定会看不到它,从而降低重用代码的乐趣。

悲伤又漂亮,它是狮子座编辑器! 它具有节点的同步副本。 什么啊 代替复制节点的内容,可以将复制的节点粘贴到“克隆”,“幻像”模式下,然后更改链接的节点之一将显示在其他节点上。 这是一个非常强大的概念,可让您解决树状信息组织中固有的矛盾。

复制节点。

返回图片

我们将其插入为“幻像”。

返回图片

幻像具有不同的图标。 名称,内容或从属节点的任何更改都会反映在副本中。 我们删除旧的“读取”节点,并验证是否已在所有位置同步执行文件名的修改。

返回图片

用数学语言来说,“幻像”使您可以从树上切换到完整的无环图。 狮子座的一棵树可以有多个根!

返回图片

这使您可以做奇妙的事情:处理信息表示,绑定异构数据容器,在一个项目中拥有无限数量的实际数据副本,将数据加载到无法放在常规树中的Leo树中。



狼人逆转


让我们做一个实验。 创建一个新节点。 向其添加文本。

 g.es( len("This is test".split()) ) 

返回图片

按[Ctrl] + [b]。

返回图片

Chpok,晚上好。 是的,事实证明,Python解释器是内置的,可以将节点的文本作为代码执行。 如果根据将节连接到外部文件的规则将节连接到节点,则还将执行节中的代码,这意味着没有力量可以阻止我们陷入混乱。

返回图片

生活示例:教程的代码非常不愿意正常编写,但是如果它超过50行,则可以保证第二天变得不可读的混乱。 值得补充的是,许多培训师使用相同的源数据集,并对它们执行各种操作。 以上适用于任何“原型”或“工具实用程序1-2次”。 在这里,描述的Leo Editor芯片非常有用。

返回图片

就是这些-这些代码可以在Leo编辑器中执行某些操作,而无需将其上传到.py文件。

与图片中的意大利面条表不同,您可以立即了解正在发生的事情的一般本质。 例如,在“ 4线性回归”程序中,来自Internet的数据首先被写入文件。 然后对根据该文件构建的“ OLS回归”数值模型进行各种操作。 此外,如果我们需要使用其他数据或模型的其他设置,则只需在一个节点上进行更改就足够了,因为程序的重用部分是由“幻像”实现的。 该程序分为6个独立的部分,每个部分分别启动,但是同时它们从一个共同点开始执行。

如果将相似主题的代码有条理地存储在一个地方,即使很长时间也很方便,然后使用导航搜索可以快速找到一些特定方法,结构化组织将有助于导航正在发生的事情。 “幻影”使您可以将复杂的非线性代码转换为一组顺序的动作,而“克隆”实体不会乘以熵,而是会减少熵,因为重复被绑定所取代,并且不会创建附加的抽象层次。

具有源文件的50个分散文件是50个分散文件。 具有源代码的50个节点是一个具有内部自组织愿望的知识库。



可视化


在开始噩梦难度级别之前,让我们回到界面。

可以拖动编辑器面板以最佳方式组织工作区。 每个文件保留其自己的外观设置。 您可以关闭除树以外的所有面板。 为了返回面板,请右键单击树标题。

返回图片

在同一菜单中有一个特定的“渲染”。 这个小东西是根据其名称设计的,可以显示世界上的一切。

默认情况下,渲染尝试将节点的文本渲染为reStructuredText 。 通过强制节点名称中的内容类型,可以包括其其他操作模式。
编号内容类型注意事项
@asciidocAsciidoctor文档标记需要安装Asciidoctor
@htmlHTML标记
@graphics-script通过QT类QGraphicsView,QGraphicsScene的自定义GUI绘图
@image显示流行格式的图片图片的路径显示在正文中
@svgSVG映射主体指示图像的路径或源SVG
@jupyter显示Jupyter互动会议无法正常运作
@latexLaTeX标记显示无法正常运作
@md, @markdown降价标记显示需要安装Markdown处理器
@movie视频展示视频的路径在正文中指定
@pyplot使用Matplotlib Python显示图表需要安装Matplotlib Python

从表中可以看到,Render的功能不是很强大,好消息是Leo Editor可以使用包括可视插件在内的插件进行扩展。 例如,我需要将数字加载到表格中并绘制图形,同时将初始数据更改一千倍。

返回图片

最小的可视插件代码如下所示:

 from leo.core.leoQt import QtCore, QtGui, QtWidgets import leo.core.leoGlobals as g class My_Plugin_Widget(QtWidgets.QWidget): def __init__(self, parent=None, leo_com=None): super(My_Plugin_Widget, self).__init__(parent) c = leo_com self.c = c self.layout = QtWidgets.QVBoxLayout() self.message = QtWidgets.QLabel("Hello there!", self) self.layout.addWidget(self.message) self.setLayout(self.layout) def init(): g.registerHandler("after-create-leo-frame", onCreate) g.plugin_signon(__name__) return True def onCreate(tag, keys): c = keys.get("c") if not c: return dw = c.frame.top dock = g.app.gui.create_dock_widget(closeable=True, moveable=True, height=150, name='My plugin') dw.leo_docks.append(dock) dock.setWidget(My_Plugin_Widget(leo_com=c)) dw.splitDockWidget(dw.body_dock, dock, QtCore.Qt.Horizontal) dock.show() 

该插件是必需的:

  1. 保存到%USERPROFILE%\Miniconda3\Lib\site-packages\leo\plugins\
  2. @settings\@enabled-plugins节点的myLeoSettings.leo文件中注册

返回图片

您可以在此处阅读有关如何制作插件的信息 ,如果急于获取更多信息,那么唯一的方法是亲自研究viewrendered.py插件。

为什么这一切呢? 再次以无限的可能性。 完全访问QT允许您以任意方式重现信息,或者以最意外的方式输入信息。



内容和形式


上面描述的所有内容看起来都像是一种便捷的工具,可以解决有限的屏幕任务,仅此而已。 从树到外部文件的转换是线性的,并且受到严格帧的限制。 甚至节点的名称也起注释的作用,但不具有其他有用的功能。 但实际上,事实证明,用树描述人类思维的复杂实体非常合适,但与此同时,机器的格式可能看起来不像任何东西和/或可能根本没有任何不同的结构。 对于一个简单的示例,采用HTML。 以这种形式准备标记将非常方便和容易(价值判断):

返回图片

一切在结构上都是一致的,可视的,不可能犯不关闭标签或错误放置标签的错误,并且进行任何规模的更改都是基本的。 尽管HTML输出文件将与该虚拟结构成“线性比例”,但是节附加机制无法产生以下内容:

  1. 开闭标签
  2. 将节点文本分配为标签属性
  3. 具有特殊名称“> <”的节点的文本放置在相应的标记内

好吧,当然,Leo Editor允许从节点代码无限制地访问树。用于阅读和写作。这使得可以对人机信息进行任意修改。可以根据您的喜好在任何方向和次数上。您可以下载某种格式,将其重建为您可以理解的树,进行更改并将其转换回。如果输出格式不重要,则可以使用Python编写外部文件。如果格式很复杂和/或存在大量数据,那么花时间将数据转移到具有节的文件节点是有利的,因为这极大地方便了转换的调试。

使用树的功能说明:
团队效果
g.es('text')print('text') Leo Editor
n = g.findNodeAnywhere(c, 'TITLE')'TITLE'
for node in n.children():
node.h/
node.b/
node.parent()
p()
c.selectPosition(p)
root_node = p.findRootPosition()
for node in root_node.following_siblings():
if node.h.startswith('OUTPUT'):, 'OUTPUT'
new_node = node.insertAsLastChild()
if node.hasChildren():
new_node = node.insertAfter()
node.deleteAllChildren()
c.redraw_now()

可以从Leo Editor源文件和完整的.leo文件中选择其他功能,但实际上没有任何文档(除此页面外)=(

顺便说一下,本文是用Leo Editor编写的。

返回图片

以下代码用于将树导出为HTML:

 @language python from pathlib import Path @others path = Path('C:\\Projects\\article\\') / 'out.html' out_text = '<body><script>document.body.style.fontSize = 20;</script>' n = g.findNodeAnywhere(c, 'TITLE') assert nh == ('TITLE') tag = f'<h1>{nb}</h1> ' out_text = out_text + tag + '\n\n' n = g.findNodeAnywhere(c, 'TEXT') assert nh == ('TEXT') for header_node in n.children(): anchor_id = hash(header_node.h) tag = f'<anchor>{anchor_id}</anchor><h3>{header_node.h}</h3>' out_text = out_text + tag + '\n' if '' == header_node.h: text = make_toc(header_node) tag = f'{text}' out_text = out_text + tag + '\n' for content_node in header_node.children(): if '@image' in content_node.h: tag = f' <img src="{content_node.b}" alt="  "> ' else: text = content_node.b if not 'table' in content_node.h: content_node.h = ' '.join(content_node.b.split()[:3]) text = text.replace('\n', ' ') tag = f'{text}' out_text = out_text + tag + '\n' tag = ' <hr/>' out_text = out_text + tag + '\n' out_text = out_text + '</body>' + '\n' with open(path, 'w', encoding='utf-8') as f: f.write(out_text) g.es('.') 



我将为自己构建一个IDE


不是一个单一的python,所以让我们尝试在...任何东西下面装备一个角落。首先,最后按下脚本按钮。

返回图片

此操作将导致在主菜单下出现带有当前节点名称的新按钮。逻辑建议单击此新建按钮将导致尝试从与该按钮关联的节点执行代码。重新启动编辑器后,按钮蒸发很方便,但很不方便。要使按钮始终保持在其位置,您需要在节点名称中添加特殊拼写,@button然后重新启动Leo Editor。

返回图片

您可以为每个用户按钮分配一个使用以下表达式的热键:@key=

返回图片

为了从一个脚本运行另一个脚本,您必须调用该函数c.executeMinibufferCommand('FIRE')每个带有链接按钮的脚本都以该按钮的名称落入编辑器命令的常规库中,也就是说,您的脚本也可以从编辑器的命令行运行。

返回图片

为了从另一个脚本(就像通过按[Ctrl] + [b])执行当前关注的节点的脚本,请使用命令c.executeMinibufferCommand('execute-script')

假设我们准备了一些代码。从Leo Editor执行它将是有益的,并且从控制台获取所有错误将是很棒的。让我们看一下使用著名的Black实用程序在节点内自动格式化Python代码的示例。

 @language python import subprocess import re c.frame.log.selectTab('Log') c.frame.log.clearLog() python_src = [] for line in pbsplitlines(): if re.match(r'@', line) is not None: line = line.replace('@', '# special_comment@') elif re.match(r'<<', line) is not None: line = line.replace('<<', '# special_comment<<') python_src.append(line) text = '\n'.join(python_src) proc = subprocess.Popen( ['black', '-', '-q', '--skip-string-normalization'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE, bufsize=0, shell=True, ) proc.stdin.write(text.encode()) proc.stdin.close() s = proc.stdout.read() if s: text = s.decode('utf-8') text = text.replace('# special_comment<<', '<<') text = text.replace('# special_comment@', '@') if 'error: cannot format -: Cannot parse:' in text: z = re.search(r'Cannot parse:.*', text) g.error(z.group(0)) else: undoData = c.undoer.beforeChangeNodeContents(p) pb = text.strip() c.undoer.afterChangeNodeContents(p,'Format with black', undoData) c.executeMinibufferCommand('execute-script') 

完成以下操作:

  1. 我们从节点取文本
  2. 我们在注释中添加了特殊的Leo Editor说明
  3. 启动控制台实用程序
  4. 我们将文本传递给实用程序
  5. 阅读其结论
  6. 回到地方特别的指示
  7. 如果没有错误,则将当前文本替换为格式化的
  8. 运行节点代码

该样本足以在其基础上启动任何操作。

现在,让我们看一下Leo Editor实际使用的漂亮清晰版本。Python生态系统提供了几种用于创建GUI应用程序的解决方案,其中一种是Kivy框架。该框架的重要功能是能够从文本文件中以特殊语言加载接口描述。Leo Editor将帮助我们,首先,将接口的代码和描述存储在一个空间中,其次,它将用树形编辑代替文本编辑,从某种意义上讲,这将使我们更接近所见即所得的接口草图。

返回图片

可以从上面的屏幕截图中提取哪些事实:

  1. Leo Editor Kivy
  2. RUN make_GUI, make_py,

返回图片

上面,您可以看一下接口的描述以组装形式的样子。这可能很有趣,但左侧的集体农场似乎是一个更易于管理的工业解决方案。正确的版本要求在周五晚上输入错字。

我们将代码传递给分支。

返回图片

很干净很明显。我们不关注DATAGRAPH。那班呢?

返回图片

圈子已经关闭,然后这个故事发生了,是针对Python的类浏览器的临时实现形式。节点头不只是注释;它们的内容在生成.py文件时使用。类嵌套级别自动形成继承层次结构。我们崇拜的一切。

返回图片

KA-EE-FF !!!不要专注于正在发生的事情的意义,会为屏幕截图抛出类。

在文件部分的裸露功能上可以执行类似的操作,但是您必须显式指定所有语言结构(def,class ...),并且进行任何更改都必须记住在那里进行大量更正(以及节点的无用的悬挂头) )

同样,关于代码和接口的单个​​空间。首先,请记住导航搜索,它使您可以快速搜索视觉元素和代码中视觉元素的代码处理程序。

返回图片

其次,还有一个非常值得期待的功能,即附加的文本编辑器。

返回图片

跳!

返回图片

因此,无需在节点之间进行复杂的相互编辑来回运行。

顺便说一句:

返回图片



思想自由


最终会有一点不自然。下文所述的所有内容均不应被视为良好工程实践的证明,而这仅仅是使您的个人想法具体化的种子。

第一个实验的起点:如果大多数程序都涉及多次从单个数据阵列重复生成其他数据阵列,那么为什么不创建一个通用类描述的带有统一数据接收/输出接口的简单构造块,以便在图形(功能块)上的编程图像中,将Leo Editor树中的相似块可视地链接在一起。区别在于它将是混合块类系统,并且将根据最大的长期利益来使用每种描述代码的方式。

基本功能单元应:具有用于接收信息的输入,能够响应其类型,处理初始信息,将处理结果打包为用于传输的格式以及将结果转换出来。

返回图片

假设解析站点有一项艰巨的任务。我们将需要以下块:

  1. 网络组件
  2. 网页解析器
  3. 用于接收数据和图形界面通讯的块

返回图片

下面显示了适合类分支的通用块的最小实际实现。

返回图片

当然,如果严格遵守以下两个规则,则每个具体模块都可以使用其自身重新加载典型方法:

  1. 在每个块中,decode方法必须调用process,然后依次调用encoding
  2. 编码方法在所有注册为输出的块上调用解码方法。

即:保证了结构统一的可用性和信息交换的同质性。

返回图片

相同,但更清楚:

  1. 原始产品位于左板上。
  2. 解码准备产品进行处理
  3. 之后,块在处理方法中执行其主要功能
  4. 产品通过编码打包
  5. 包装产品转移到后续单元

事实证明,每个模块都是非常独立的,他唯一需要了解的外部环境是分析输入数据的特定方法。通用代码负责将块连接在一起的特定实现。结果,如果我们有几个可用的类似管道,则只需对过程方法的特定实现进行更正,就可以简单地将它们整体复制。

在下一张图片中,您可以观察到与上一节中描述的类非常相似的工作。区别在于节点的嵌套不是建立父子关系,而是建立相应块的输入-输出关系。为了组织与不相邻块的数据交换,使用拐杖以明确宣布退出的形式使用,这种情况很少见,这是合理的。

返回图片

使用这种方法,流水线的数量变得无关紧要:其中两个或50个。信息处理的阶段数量也微不足道(在合理的范围内),与文本模块的膨胀相比,这不会影响理解的简单性。一站式复制输送机时,便形成了一条全新的链条。一切都安排得完全相同,即使经过5年也很容易进行更改,组织功能的方法学原理是相同的,无需从抽象的头脑中创建空灵的城堡。

返回图片

附加自定义管道不会使整体图像失真,因为处理任意数据的逻辑总是相同的。

返回图片

第二个荒诞的故事。我需要制作一个Kvent游戏(对于使用标准纸牌的游戏,它甚至可以在更广为人知的游戏中直接模仿知名游戏)。有许多不同的方法来组织游戏周期,其中一个简单的选择就是状态机。使用状态机,从理论上讲,一切都很好而且很简单,实际上,在任何实际程序中支持7个以上的状态逐渐变得乏味,而无需添加几层抽象。在这一点上,我认为以树的形式对状态机进行视觉维护是一个有趣的选择。

返回图片

我们从树上编写程序代码生成器,它产生以下结果:

返回图片

不用担心。

返回图片

接下来是条件的变化。这是可疑的。

返回图片

返回图片

它只是一张纸牌,可以替换成对的任意一张纸牌。好的,将一台计算机共享到多台计算机中。

返回图片

接下来,处理游戏回合的逻辑就产生了。

返回图片

在这一点上,这种状态机描述的实际适用性受到了限制,尽管仅当有意地将树100%部署时,树才显得令人毛骨悚然。但是,带有图片的卡片影响游戏过程的效果仍然完全没有实现。可以假定,用于此类任务的事件机将是更好的解决方案。再说一次,很容易把它放在树上;)



万岁,结局


在Leo Editor中,严重缺少常规自动完成功能,并且所选单词没有多次突出显示(记事本++中为“智能突出显示”)。但是,即使存在这些严重的缺陷,也很容易忍受,因为一旦您尝试过,没有这种方便的工具就已经无法实现,在该工具中您可以毫不费力地绘制自己的个人环境来完成任何任务。世界上有类似或更好的东西吗? IDE中有很多怪物,它们充满了智能智能功能,但是其中哪个对信息具有类似的控制权,哪个在组织工作流方面提供了很大的自由度?

想法,材料,工具,产品。在工程界,上一代工具使您可以继续使用下一代更复杂的工具。我们已经从手电钻发展到以猫为食的成长型设备。在好的车床阶段,编程工作就停了下来,但是我们没有深入研究,而是争论哪种合金更好地适合刀具,您应该从上方或从侧面进刀。 Leo Editor并不是明天问题的答案,而是一个可以做得更好的信号。

关键不是一个程序员可以通过编写代码来解决问题,而另一个程序员(有条件地)“推动”同一件事。您可以(有条件地)“有条件地”单击其中的工具,将使您解决以前在时间和复杂性方面无法访问的问题。将来,我们将需要能够实时编写数百万个相关程序的程序,而我们无力管理这种规模的复杂性。

通常,创建您的现实,如果没有为此所需的工具,请执行它们,它会起作用。




UPD 应用实例


管理员:命令库。您可以只存储它,可以按原样运行它,也可以在树中使用参数设置。例如,组织使用多个数据库的工作。

返回图片

音乐的算法合成:轨道的组织

返回图片

嵌入器:万一您的环境受到限制,可以任意组织代码。

有两种选择:
1.以最有利的顺序将程序分成几部分
2.如果该语言没有功能,则可以使用幻象对它们进行仿真。

返回图片

有三种方式来组织代码执行顺序:五

返回图片

返回图片

返回图片

分期:将您常用的军械库转移到您的个人“钴罢工”中”

返回图片

Source: https://habr.com/ru/post/zh-CN484930/


All Articles