![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
代码技巧
文章平均质量分 67
NRatel
道阻且长,行则将至
展开
-
不用 If 将越界索引转化为标准索引
若一个列表是循环的,当需要将当前索引左右切换至上一个/下一个时。就需要做这样的转换。虽然当索引越界时,可以用 if ,但有些丑,用一个算式即可。(#list 代表列表长度,列表索引从1开始)1、左切至前一个(将 x - 1 转到标准值):y=((x - 1) + (#list - 1)) % #list + 1如,1,2,3,4,5,6,7 减一后 变为 71234562、右切至下一个(将 x + 1 转到标准值)y=(x + 1) % #list如,1,2,3,4,5,原创 2022-02-26 12:03:46 · 271 阅读 · 0 评论 -
利用协程或迭代器处理连续(串行)异步任务
前置文章:游戏开发与面向过程(POP)一:为面向过程正名游戏开发与面向过程(POP)二:串行步进系统原创 2021-05-30 15:25:23 · 291 阅读 · 1 评论 -
连续(串行)异步任务处理
上篇文章已经讲了面向过程思想的重要性。然而,最后的 lua 例子不算优雅(回调地狱了)。------------------------- NRatel割-------------------------一、解决方案为了解决这个问题。 NRatel先将 “过程” 这个概念抽象一下。将它称做 “步”(Step)。对于每一“步”,都有一个进入方法和完成回调(可以同步完成,也可以异步完成,这点无所谓)。using System;namespace NRatel{ pub..原创 2021-05-23 22:15:05 · 485 阅读 · 2 评论 -
游戏开发与面向过程(POP)
可能大多数人学习编程都是从C语言开始的。然后在学C++的时候听过这样一句话:C语言是面向过程的、C++是面向对象的。这让很多人潜意识里觉得, “面向对象比 面向过程 更高级”!其。实并不是这样,它俩的地位应该是平等的、缺一不可的。---------------------------------------NRatel割---------------------------------------“过程”在程序中无处不在。不管你写的是同步逻辑还是异步逻辑,都是一个个过程。而“面向过程..原创 2021-05-16 21:34:21 · 1502 阅读 · 3 评论 -
消除程序中的 if else(一)
一、目的:消除 if else 使程序优雅。 二、方法:将参数与对应的操作方法放入集合中统一处理。 三、点评:这种方式消除了if else,但其实只是起了整理代码的作用。在参数新增时,仍然需要修改处理类(因为处理方法还在处理类中)。要想达到真正的扩展目的,请看 消除程序中的 if else(二)。 四、演示:using System;using System.Col...原创 2018-12-28 18:42:35 · 1094 阅读 · 0 评论 -
消除程序中的 if else(二)
一、目的:消除 if else 使程序易于扩展。 二、方法:参数自备处理其自身逻辑的接口方法,被调方法在接受该参数时直接反调该接口方法。 三、点评:这种方式将 “执行者内部的条件扩展(if...else)”转化成了 “以参数方式传入的外部对象的继承扩展”。可以灵活应对参数扩展,不用修改执行者类。 仔细看看,其实它就是 策略模式。 采用这个思路的设计模式有不少,可以仔细...原创 2018-12-29 11:14:41 · 782 阅读 · 0 评论 -
多字段排序小问题
列表按多字段排序的需求,极常见。回顾一下sort方法中,compare方法参数的基本规则(不同语言都差不多,这里拿js中ab对象的x字段来说): 若想要升序排序,可直接返回 a.x - b.x 。原理:比较时若a.x>b.x,则差为正,交换a和b的位置;反之若a.x<b.x,则差为负,保持a和b的位置不变。 若想要降序排序,就直接返回 b.x - a.x。通常...原创 2019-03-23 16:46:57 · 823 阅读 · 0 评论