美文网首页
程序员之路

程序员之路

作者: funcky | 来源:发表于2018-11-15 20:22 被阅读0次

阅读代码时,先弄清楚每一块的功能;再根据关键的东西去看懂它(根据钻孔生成德劳内,加密三角剖分网络,用边界去截取)

通用的功能最好写成一个class,或者一个file,写成通用的功能

页面的阅读逻辑和算法的逻辑分开,不要一条线写到底

面向对象编程

找到使用代码模块的方法,不必纠结于代码细节

类,包括属性(必须要有的,固有的),方法(行为,一定要有括号),可能会重复利用的,关系特别大的,复杂的流程也可以当作一个类,此时不注重属性,而是注重方法,此时类相当于一个黑箱子。

一个类,开一个文件,文件名=类名

非静态类调用时必须先实例化一个对象,静态类则可以直接使用,静态类中一定要有静态方法,静态类适用于比较简单的东西。

检查输入的数据是否为有效数据,建立无效数据删除机制。

基本的数学问题搞清楚,逻辑严密才不会出问题,模块化写代码,模块化测试,追踪奇异数据。

有需求再写代码,先写最基本的用途,再根据实际需求补充类中的字段及方法

保护好类中的非独立变量,不可为外部所更改(独立变量可更改,非独立变量的更改易引起冲突),可利用get、set控制外部数据读写类的内部字段,保证类的安全性。

封装有时称为面向对象的编程的第一支柱或原则。 根据封装原则,类或结构可以指定自己的每个成员对外部代码的可访问性。 可以隐藏不得在类或程序集外部使用的方法和变量,以限制编码错误或恶意攻击发生的可能性。

习惯用类的方式表征数据,一个类要放在一个cs文件中。

## Class

类的组件包括:

# CAUTION

• “>10e-5 “means bigger than” 〇”, this is a question that so simple which will kill you.

• When you divide something, you must consider what if the denominator(分母) is 〇

# 自己的思考

类定义对象类型,但不是对象本身,类描述对象的类型,对象是类的可用实例,对象是基于类的具体实体,也可称为类的实例,创建类的实例后,会将一个该对象的引用传递回程序。

多写代码,边写边尝试

结构体是稍有些复杂的数据。

# 强哥note

## 程序结构的演变

多条语句包装起来重用-》函数

多个函数或变量包装起来-》类

类被实例化后-》对象OBJECT

类中的公共变量-》属性

类中的公共函数-》方法

存放类或函数可供其他程序调用的py文件-》模块

存放模块文件的文件夹结构-》包package

类的属性

公共和私有属性

属性在内部的访问(隐私)

属性在外部的访问(公开信息,组织内部可知道)

类的方法

动态方法,参数的特别规定,SELF,类里面的函数的第一个参数一定是SELF变量(SELF指class自己,self.变量名=

静态方法:@static method

静态方法和动态方法的区别与各自的优缺点:静态方法常驻内存,用于处理简单事物,静态方法不宜过多,不同的设备性能不同,动态方法实例化后载入内存不同设备性能不同

初始化方法:init,类被实例化后自动执行的方法(入口函数,构造函数)

类的实例化,静态方法可以不实例化,一个类被实例化后,就成为了两个不同的副本,对同样的事情可能有不同的反应

### 模块MODULE

讲所有可用的code放入一个py文件,这个文件成为模块

模块的引用:文件名即模块名

if name=='main': 使用该语句,只是用模块而不执行程序题(普遍的用法,不是语法)

package

## 条件判断

Beginner坑:注意条件的全覆盖,提前给label赋值为“unknown”

三目运算符:return True if condition else retuen False

正则表达式—字符串处理库,永远不要相信用户的输入(处理用户输入)是可靠的

Circulation

'''While true else, for item in collections'''

Infinite circulation的作用与坑

Break/continue

单行:while condition:pass

嵌套:range(5) =range(0, 5, 1), range(2, 4), range(2, 10, 3)

For i in range ( len( a )): print( i, a[i] ) #range与len结合索引遍历列表

知识点

函数就是经验的固化(对你的编程事业非常重要)

def functionName (parList)

参数list dict是可变的

用关键词方式传递参数,参数的位置可变

参数的默认值

不定数量的参数可以用集合代替

Return默认为none,return后面的值和return本身都不是必须的

高级函数应用:匿名函数,迭代器,生成器,装饰器

列表和字典都可以被修改,不安全,建议使用obj.copy传递,你可以忘掉不可以更改的元组。

数据常用操作:增删改查

Dict中重复的key只保留最后的

常用操作中不可忽略大小写问题

通常使用isnumeric, isempty判断(none、空格、什么都没有“”)

加(格式化,忘记%,强烈建议format,乘、截取)

# Unity

## 基本模块

1、 Inspector查看场景中的物体都挂了哪些脚本

2、 可以将文件夹直接拖拽进Unity

## 基本语法

1、 Start() 场景运行初始执行 // Use this for initialization、Update() 每帧执行一次、OnGUI() 每帧执行一次(用户图形界面,写按钮)

2、 SendMessage用法

[图片上传失败...(image-2c600b-1542284534287)]

找到这个物体,调用挂到该物体上的脚本中Test类,并实例化、传递参数以对该物体进行某种操作。

3、 Transform可用于查询物体的坐标,名称等基本信息

4、 Mouse

5、 Debug.Log("Start"); //在屏幕上输出文字

6、 public GameObject cube; //Private 修饰符会将操作封装起来

public GameObject sphere; //😀Public 修饰符会将操作显示在inspector里面

在场景中新建Object

7、 public & private之间的区别:public代表其参数可以在Inspector窗口里面进行调节,而Private代表可以在脚本里面进行调节。

8、 [图片上传失败...(image-37834c-1542284534287)] 可以直接在Hierachy窗口中新建对象,拖拽到对应脚本上(脚本中的对象为public)

9、 Render 渲染器是使物体显示在屏幕上。对于任何游戏物体或组件它的渲染器可以通过渲染器属性来访问

10、 GameObject是Unity场景里面所有实体的基类

11、 Input.GetMouseButtonDown 获取鼠标按钮按下, 在用户按下指定鼠标按键的那一帧返回true。你需要在Update方法中调用这个方法,此后每一帧重置状态时,它将不会返回true除非用户释放这个鼠标按钮然后重新按下它。按钮值设定为 0对应左键 ,1对应右键 ,2对应中键。

12、 鼠标在屏幕点击,并发射射线,变相的获取

''' Ray ray = camera.GetComponent<Camera>(). ScreenPointToRay(Input.mousePosition); '''

13、 Input.GetPosition 获取位置,static function GetPosition (deviceID : int) : Vector3

14、 Input 输入: Interface into the Input system(输入系统的接口)。

15、 <u>gameobject</u> <u>:当前游戏对象的实例,</u><u>transform:</u><u>当前游戏对象的</u><u>transform</u><u>组件。</u>从概念可以看出,两者是不同的两个东东,在unity中每个游戏对象都是一个gameobject,而每个gameobject都包含各种各样的组件,但从这点可以看出transform是gameobject的一个组件,控制着gameobject的位置,缩放,和旋转,而且每个gameobject都有而且必有一个transform组件。

16、

17、

## 有关套路

【选中物体】在屏幕上画点,从该点沿摄像头前方散发射线,若射线与物体有交点则可以选中物体并对物体进行操作

# 剖切

划线→传参数→剖切

自己划线(选点)→传参数→剖切

## FAQ

1、 当编辑器编辑Unity脚本无法自动弹出智能提示【解决办法】edit→Unity Preference→external tools→External Scrip Editor重新选中并链接编辑器devenv.exe

2、 有的时候看不见对象,可能是对象在另外一个对象内部

3、 gameobject和transform的区别和关联:

4、

5、

常见报错解决方法

错误代码:并非所有的代码路径都返回值

解决办法:

1)在返回值的函数中,一定要保证无论程序走哪个分支都会正常的用return来返回一个值,即 不要置入if语句中

2)不要置入for循环语句中,因为循环有可能会一次都不执行,直接跳过所以将return写在循环里面不能保证任何逻辑下都有返回值,而且即使你用传入的参数控制,让逻辑能够完美的运行,但是编译器可不知道你运行的时候究竟会传进什么东西来,这种 for 循环永远不可能结束的代码,也是报相同的错误。

附注:所以编译器有时候也跟“你的技术主管”一样,看一下你这个人做事是否在关键地方显得有规矩,不管你有什么理由,只要形式上不规矩就不行。

小结:return后面的代码不会执行,可利用return控制后面语句的执行。

相关文章

网友评论

      本文标题:程序员之路

      本文链接:https://www.haomeiwen.com/subject/zcjufqtx.html