编程拍照风格(良好的编程风格有哪些)

2023-11-12 09:41:58 数码极客 bianji01

 

关于编程风格??

首先,编程风格并不同于其他的style,目的并不是形成自己独树一帜的风格,而是为了让你的程序易读,有利于团队合作以及别人帮你改错。

风格是通用的

C语言和C++语言的编程风格(Java见下)

第一章:缩进格式

Tab是8个字符,于是缩进也是8个字符.有很多怪异的风格,他们将缩进格式定义为4个字符(设置为2个字符!)的深度,这就象试图将PI定义为3一样让人难以接受.

理由是:缩进的大小是为了清楚的定义一个块的开始和结束.特别是当你已经在计算机前面呆了20多个小时了以后,你会发现一个大的缩进格式使得你对程序的理解更容易.

现在,有一些人说,使用8个字符的缩进使得代码离右边很近,在80个字符宽度的终端屏幕上看程序很难受.回答是,但你的程序有3个以上的缩进的时候,你就应该修改你的程序.

总之,8个字符的缩进使得程序易读,还有一个附加的好处,就是它能在你将程序变得嵌套层数太多的时候给你警告.这个时候,你应该修改你的程序.

第二章:大符号的位置

另外一个C程序编程风格的问题是对大括号的处理.同缩进大小不同,几乎没有什么理由去选择一种而不选择另外一种风格,但有一种推荐的风格,它是Kernighan和Ritchie的经典的那本书带来的,它将开始

的大括号放在一行的最后,而将结束大括号放在一行的第一位,如下所示:

if(xistrue){wedoy}

然而,还有一种特殊的情况:命名函数:开始的括号是放在下一行的第一位,如下:

intfunction(intx){bodyoffunction}

所有非正统的人会非难这种不一致性,但是,所有思维正常的人明白:(第一)K&R是___对___的,(第二)如果K&R不对,请参见第一条.(:-))......另外,函数也是特殊的,不一定非得一致.

需要注意的是结束的括号在它所占的那一行是空的,__除了__它跟随着同一条语句的继续符号.如"while"在do-while循环中,或者"else"在if语句中.如下:

do{bodyofdo-loop}while(condition);

if(x==y){..}elseif(x>y){...}else{....}

理由:K&R.

另外,注意到这种大括号的放置方法减小了空行的数量,但却没有减少可读性.于是,在屏幕大小受到限制的时候,你就可以有更多的空行来写些注释了.

第三章:命名系统

C是一种简洁的语言,那么,命名也应该是简洁的.同MODULE-2以及ASCAL语言不同的是,C程序员不使用诸如ThisVariableIsATemporaryCounter之类的命名方式.一个C语言的程序员会将之命名为"tmp",这很容易书写,且并不是那么难以去理解.

然而,当混合类型的名字不得不出现的时候,描述性名字对全局变量来说是必要的了.调用一个名为"foo"全局的函数是很让人恼火的.全局变量(只有你必须使用的时候才使用它),就象全局函数一样,需要描述性的命名方式.假如你有一个函数用来计算活动用户的数量,你应该这样命名--"count_active_users()"--或另外的相近的形式,你不应命名为"cntusr()".

有一种称为Hungarian命名方式,它将函数的类型编码写入变量名中,这种方式是脑子有毛病的一种表现---编译器知道这个类型而且会去检查它,而这样只会迷惑程序员.--知道为什么Micro$oft为什么会生产这么多"臭虫"程序了把!!.

局部变量的命名应该短小精悍.假如你有一个随机的整数循环计数器,它有可能有"i",如果没有任何可能使得它能被误解的话,将其写作"loop_counter"是效率低下的.同样的,""tmp"可以是任何临时数值的函数变量.

如果你害怕混淆你的局部变量的名字,还有另外一个问题,就是称

function-growth-hormone-imbalancesyndrome.

第四章:函数

函数应该短小而迷人,而且它只作一件事情.它应只覆盖一到两个屏幕(80*24一屏),并且只作一件事情,而且将它做好.(这不就是UNIX的风格吗,译者注).

一个函数的最大长度和函数的复杂程度以及缩进大小成反比.于是,如果你已经写了简单但长度较长的的函数,而且你已经对不同的情况做了很多很小的事情,写一个更长一点的函数也是无所谓的.

然而,假如你要写一个很复杂的函数,而且你已经估计到假如一般人读这个函数,他可能都不知道这个函数在说些什么,这个时候,使用具有描述性名字的有帮助的函数.

另外一个需要考虑的是局部变量的数量.他们不应该超过5-10个,否则你有可能会出错.重新考虑这个函数,将他们分割成更小的函数.人的大脑通常可以很容易的记住7件不同的事情,超过这个数量会引起混乱.你知道你很聪明,但是你可能仍想去明白2周以前的做的事情.

第5章:注释

注释是一件很好的事情,但是过多的注释也是危险的,不要试图区解释你的代码是注释如何如何的好:你应该将代码写得更好,而不是花费大量的时间去解释那些糟糕的代码.

通常情况下,你的注释是说明你的代码做些什么,而不是怎么做的.而且,要试图避免将注释插在一个函数体里:假如这个函数确实很复杂,你需要在其中有部分的注释,你应该回到第四章看看.你可以写些简短的注释来注明或警告那些你认为特别聪明(或极其丑陋)的部分,但是你必须要避免过多.取而代之的是,将注释写在函数前,告诉别人它做些什么事情,和可能为什么要这样做.

第六章:你已经深陷其中了.

不要着急.你有可能已经被告之"GUNemacs"会自动的帮你处理C的源代码格式,而且你已经看到它确实如此,但是,缺省的情况下,它的作用还是不尽如人意(实际上,他们比随便敲出来的东西还要难看-ainfinitenumberofmonkeystypingintoGNUemacswouldnevermakeagoodprogram)

于是,你可以要么不要使用GUNemacs,要么让它使用sanervalules.使用后者,你需要将如下的语句输入到你的.emacs文件中.(defunlinux-c-mode()"CmodewithadjusteddefaultsforusewiththeLinuxkernel."(interactive)(c-mode)(c-set-style"K&R")(setqc-basic-offset8))

这会定义一个M-xLinux-c-mode的命令.当你hacking一个模块的时候,如何你将-*-linux-c-*-输入在最开始的两行,这个模式会自动起作用.而且,你也许想加入如下

(setqauto-mode-alist(cons("/usr/src/linux.*/.*.〖ch〗$".linux-c-mode)auto-mode-alist))

到你的.emacs文件中,这样的话,当你在/usr/src/linux下编辑文件的时候,它会自动切换到linux-c-mode.

但是,假如你还不能让emaces去自动处理文件的格式,不要紧张,你还有一样东西:"缩进".

GNU的缩进格式也很死板,这就是你为什么需要加上几行命令选项.然而,这还不算太坏,因为GNU缩进格式的创造者也记得K&R的权威,(GNU没有罪,他们仅仅是在这件事情上错误的引导了人们),你要做的就只有输入选项"-kr-i8"(表示"K&R,缩进8个字符).

"缩进"有很多功能,特别是当它建议你重新格式你的代码的时候,你应该看看帮助.但要记住:"缩进"不是风格很差的程序的万灵丹.

JAVA编程风格简析

很久以来都在体会着JAVA的风格,现在做一简单陈述,希望大家多提宝贵意见。

对于一种好的编程语言,学习它的编程风格是很重要的。每种语言都有自己的编写和注释约定,当然所有语言都建立在最基本的约定之上。编程中最重要的并不是让代码按自己希望的方式运行,而是程序中那种自明的编程风格(这对于程序员的益处相信众多程序员都身有体会)!但这还不够,程序还应该具有可读、相对持久和可维护性。可读性非常重要,因为你不希望自己以前的作品在之后的阅读中给自己留下障碍,当然,更重要的是自己的程序能让其他程序员读懂并且修改。

下面我把工作中所理解的java风格做一简单总结,这是我所理解的好的编程风格和应用中我们应当如何使用java编写自己的代码的小Guide。这并不完全,希望大家帮我陆续总结各自的经验。

一般性概述

好的编程风格固然重要,但是你一定听说过一些程序员的个人风格。其实我们完全不必为那些所谓条条框框所累,但是作为原则是我们至少不能打破这些常规。我们应该在保持自己风格的同时尽量的把自己与编程潜原则靠拢。

可读性很容易达到,比如,让自己的代码缩排排列、名字采用描述性但不要过长(短名应仅仅用在非远程)、特殊名称比如pi应当被定义为final类型。模块性是编程需要注意的另一重点,把代码划分到类里,在类中把功能划分到方法中,别让一个类太大,否则在使用、修改和理解上都会造成不必要的麻烦,方法也一样,如果一个方法长度超过50行,它产生错误的概率将接近100%,尽量把大方法划分为小方法,编程中为避免重复编写,还应尽量调用JAVA标准类库。

尽量避免在写代码和注释时使用不同语言,经常见到论坛有朋友询问诸如在java中调用c、调用php、调用shell之类的问题,其实在编程中,我们应尽量使用一种语言去完成事情。另外就是不必最优化自己的代码,应该选择相对较优的算法就可以了。

类、方法和fields

类应体现出某种物质的基本概念,比如要编程实现“汽车”的组成,那么所有的汽车都可以用类Car实现。这个类应当包括域描述、属性描述和car的状态(color,numberofdoors,age等)和由car可完成的操作(getColor,setColor等)。为了提高类的可重用性,不要在类中有过多的描述,当然这也会增加错误产生的机会。

类名首字母大写,比如Date,String,Hashtable等......

类如下定义:(未使用Javadoc做注释):

publicclassCar{

/*Instancevariablesareplacedeitherinthebeginning

orattheendoftheclass*/

privateintage;

privateColorcolor;

/*Theconstructorshouldbeplacedinthebeginning*/

publicCar(intage,Colorcolor){

this.age=age;

this.color=color;

/*Examplemethod*/

publicintgetAge(){

returnage;

/*Themainmethodisoptional,butlookslikethis.

Ifitexists,itiseitherthefirstorthelast

methodintheclass*/

publicstaticvoidmain(String[]args){

注意类名和大括号间的空格!

方法一般定义为public。当然,如果方法仅仅在当前类用到可以定义为private,而如果希望一个子类沿用这个方法则不同,这时候的方法应定义为protected。

java中的方法定义很有趣,它们一般小写字母开头,如果有两个字组成,第二个字的首字母则大写。因此名字的描述性是至关重要的。这使你不用阅读整篇代码来判断这是一个什么方法。在给自己的方法取名时应尽量不要太短或者太长,另一个需要注意的是大多方法使用动词(动宾短语)。

publicvoideat(){}

publicvoideatBananas(){}

Selector(选择器)方法有get前缀,后缀是它们将要get的,比如

publicintgetBananas(){}

Mutator(存取器)方法则有set前缀,后缀则是他们要set的,比如

publicvoidsetBananas(intamount){}

注意mutators大多无返回值。

方法的参数应当以如下方式给出:

publicvoidaMethod(typeparameter1,typeparameter2,...,typeparametern){}

如果参数过长,也可以断开为几行,应对齐向下排列如:

publicvoidaMethod(typeparameter1,typeparameter2,...,

typeparametern,typeparametern+1,...,

typeparameterm,typeparameterm+1){}

另外要注意类的左束括号应在方法的右束括号之后而非下一行:

publicintaMethod(){

inti=0;

if(i==0)

System.out.println("success!");

为了文件可读性好,还要注意语句最好写在同一行,当然一行写不下是可以断行的,比如行字母超过80。

fields

比如变量,如果不希望它永久有效,应设为private。如果一个变量在类中不发生任何动作(比如数据结构中的node)则可以设置为public,常量一般声明为public。如果不能确定一个变量到底该声明为什么,应暂且声明为private。

field的名字一般使用小写字母,不要使用下横线或其他特殊字符。如果变量包含两个字,那么第二个字的首字母大写。比如:

inti,j,k;

Datedate;

doublemyField;

常量一般全部大写,也可以包含下横线:

publicstaticfinalintMAX_SIZE_OF_DATABASE

fields的名字通常为名词。较重要的fields更应具备描述性,比如程序中包含一个游戏的得分,那可以用score来代表。如果变量变化较频繁,那使用一个单一字符来代表就ok了:

i,j,k通常代表整数

r,t,u,v,w通常代表实数

x,y,z通常是并列出现或代表浮点数

s,s1,s2,通常代表字符串

c,ch通常代表字符

f,file通常代表文件

tmp,temp通常代表临时变量

ctr,cnt,cntr一般代表计数器(如果i,j,k这些变量已被使用)

dummy,foo,bar一般代表哑元变量

args是main-method的主参数名

缩排与换行

每行长度不得超过80字符。如果需要可以折行时,也应当与上一行有共同的缩排距离。代码应如何交错、如何建立新行、在哪里建立允许、哪里不允许都有一些一般约定,缩排空格一般为2个或4个空格。

条件表达式

如果见到如下语法表达式:

if(expr)

statement1;

statement2;

代码行向右错排两个空格如上所示。

如果在一个表达式中有超过一条的声明,则需要大括号:

if(expr){

statement1;

statement2;

}else{

statement3;

statement4;

有时我们会希望在表达式中使用表达式(比如条件嵌套),这时应注意else表达式,它的位置很容易出错!如例:

if(expr1){

statement1;

statement2;

}elseif(expr2)

statement3;

elseif(expr3){

statement4;

statement5;

}else{

statement6;

statement7;

注意大括号位置!

Loops

while-loop语法如下:

while(expr){

statement1;

statement2;

for-loop语法如下:

for(expr1;expr2;expr3){

statement1;

statement2;

注意大括号位置!仅一条声明时大括号省略:

while(expr)

statement;

for(expr1;expr2;expr3)

statement;

例如,我们写一个procedure写出1到10这十个数字:

for(i=1;i<=10;i++)

System.out.println(i);

try-catch语法形如:

statements;

}catch(ExceptionClasse){

statements;

如果try-catch语句后跟随finally子句则形如:

statements;

}catch(ExceptionClasse){

statements;

}finally{

statements;

每一行最好只阐述一件事情。比如,一行包含一个声明、一个条件语句、一个循环等。不论多小,最好不要一行办两件事及以上。例如不要把一个if表达式或循环语句的主体放置在同一行,这样的表达式断行的易读性会更高。通常,互相协作的代码应放在一起,为保证代码美观可读,我们应将代码的不同代码段放置在不同的段落。不过要牢记断行不要太过分!比如:

publicintfactorial(intn){

intresult=1;

for(inti=1;i<=n;i++)

result*=i;

returnresult;

给自己的代码加入注释

注释就是类的描绘、方法存在的原因、它完成了什么以及它对它其中(变量)的作用域。假定阅读你代码的人已经知道这是什么语言,所以不需要注释语句功能,尽量使用简短而有描述力的注释。

Java有两种类型的注释:

//Thisisacommentthatcontinuesuntiltheendoftheline.

/*Thisisacomment.Itgoesonandonandonandonandonandonandon

andonandonandonandonandonandonandonandonandonandonand

onandonandonandonandonandonandonandonandendslikethis:*/

*ThisisaJavaDoccomment.MoreaboutJavaDocinthenextsection.

如果在注释中加入注释则会出错:

/*Youarenotallowedtodoanythinglikethis/*becausethecompilerwill

complain,ifyouarelucky*/DONTDOTHIS!Anddontwritecommentsin

uppercaseeither...*/

注释应放在它要解释内容上下,这样会让代码更易于理解。

不要注释一些语言的语句功能:

i++;//Add1toi

更不要让自己的代码处于这种状态:

for(inti=1;i<=n;i++)

/*dontplacecommentswhere

theydontbelong*/

result*=i;

较短的注释既可被放在被注释代码上下,而长注释则习惯性的放在代码之上:

/*Commentscanbeplacedbeforethe

blockthatistobecommented*/

for(inti=1;i<=n;i++)

result*=i;

for(inti=1;i<=n;i++){

result*=i;//shortcommentscanbeplacedlikethis

tmp++;//ifnecessary,theycontinuehere

不要写没用的注释:

i++;//changethislater

Excuseme,这句肯定是胡扯!

不要写自己都看不懂的注释:

i++;//BMW

BMW?如果你能连续十天记住这是什么意思的话,那么你的记忆真是不错了。所以不要写没人能看懂的注释,ok?

最后重申一下:写简短而富于描述性的注释,把它们放在该放的地方,而不要考验你自己的记忆力!

JavaDoc-文档工具

JavaDoc不仅是另一种给代码加注释的仿佛咱,更是一个文档工具。类、方法和一些重要地方需要用JavaDoc来注释。这并不是说你可以放弃常规的注释,这两者在代码中应该是相辅相成、互相弥补的关系。

类被注释如:

*Carrepresentscars...Adescriptionoftheclass

*shouldbeplacehere.Notethatthedescriptionbegins

*onthesecondlineandthatthereisaspacebetween

*theasterixandthetext.Nextwewilladdsomefields

*indicatingwhotheauthorsoftheclassareand

*otherusefulinformation.Noticethenewline!

*@authorJerryMeng

*@version%I%,%G%

publicclassCar{

注意JavaDoc结束和类开始间无空行。

方法被注释如:

*Adescriptionofwhatthemethoddoes...

*@paramnadescriptionoftheparameter

*@returnadescriptionofthereturnvalue

publicintfactorial(intn){

某些不是全部,被JavaDoc注释区域如:

*Shortdescriptionofthevariable(oneline)

typevariable;

什么应当使用JavaDoc做注释?如何注释的恰当呢?

可以这样想,JavaDoc中所作的注释都可以在类的文档中看到。所有读这个类的文档的读者都会明白这个类所完成的功能、它包括的方法、如何使用这些方法及方法的返回值。一些作用域,比如public的变量或常量将会一目了然。任何不了解这个类内部结构的人都可以轻松的调用它。这便是你用JavaDoc可以轻松提供的信息。而使用一般注释的地方,一般是给那些可能修改你的类代码的程序员,它们一般描述了类的内部信息和结构。

下面我写一下car的类来描述一个编程风格好的java类应该是怎样的。当然这仅仅是一个小例子(apartfromselectorandmutatormethods),仅仅是在考虑JAVA编程风格上一个参考而已。

importjava.awt.Color;

*Thisisaclassrepresentingcars.Acarhascertainfeatures,such

*ascolor,age,numberofdoorsetcandacarcanberepainted,

*thetankcanbefilledetc.

*@authorJerryMeng

*@version%I%,%G%

publicclassCar{

*Themaximumsizeofthetankinlitres.

privatestaticfinaldoubleTANK_SIZE=100.0;

*Thecolorofthecar.

privateColorcolor;

*Theageofthecar.

privateintage;

*Thenumberofdoorsofthecar.

privateintdoors;

*Theamountofgasolineinthetank.

privatedoublegasoline;

*Classconstructor,whichconstructsabrandnew,blackcarwith

*fivedoorsandafulltank.

publicCar(){

this(Color.black,0,5,TANK_SIZE);

*Classconstructorspecifyingthecolor,age,numberofdoors

*andlitresofgasoline

*@paramcolorThecolorofthecar

*@paramageTheageofthecar

*@paramdoorsThenumberofdoors

*@paramkmKilometresdriven

*@paramgasolineThelitresofgasoline

publicCar(Colorcolor,intage,intdoors,doublegasoline){

this.color=color;

this.age=age;

this.doors=doors;

this.gasoline=gasoline;

*Returnsthecolorofthecar

publicColorgetColor(){

returncolor;

*Repaintsthecar(i.e.changesitscolor)

publicvoidsetColor(Colorcolor){

this.color=color;

*Returnstheageofthecar

publicintgetAge(){

returnage;

*Returnsthenumberofdoorsofthecar

publicintgetDoors(){

returndoors;

*Returnstheamountofgasolineinthetank

publicdoublegetGasoline(){

returngasoline;

*Fillsthetank.Theamountofgasolinecannotexceed

*thesizeofthetank.Inthatcase,thetankwillbe

*filledtothemaximumandtherestwillrunoutin

*thesand.

*@paramgasTheamountofgasolinetoputinthetank

publicvoidsetGasoline(doublegas){

if(gasoline+gas<=TANK_SIZE)

gasoline+=gas;

gasoline=TANK_SIZE;

现在比较流行的拍照风格都有哪些

一、最近拍照流行什么风格

1、小清新

大家一般印象里都会觉得小清新风格是最好拍的,看起来比较日常感,造型穿着学生装、休闲装比较多,所以通常被认为是最保险的,不会错的风格,但其实也并不是所有人都适合它的。拍摄以校园、居家环境或者城市街道为主,看上去非常的清淡,不会让人有沉闷的感受。

拍摄取景以大片的植物为主,营造一种置身于森林的感觉。通常比较少体现城市风景,包括现代建筑、街道、居室等等。森系摄影体现出一种天人合一的美,很注重营造梦幻浪漫的感觉,模特的造型一般偏华丽些,头饰也较为精致。

3、复古风

给人的感觉是有韵味,拍出来显得人旧美旧美的。复古风人像的服装和造型上往往较为有辨识度,使得很多人以为只要在服装和拍摄背景上注意了,就很容易拍出来,而其实呢,复古风在人物的神态,拍摄者的想法和技巧等方面,需要更加注重对细节的把握。

4、情绪人像

适合文艺青年们使用的拍照风格,比较注重模特的神态,相对来说,服装、造型一般不需要很精美,通常比较简洁些。

5、都市风

都市风造型上以时装以及家居服装为主,主要展现都市生活中的风采,比起前几种来,都市风这几年不是很流行了,原因我想和都市风的格调和适合的人群比较有局限性有关,都市风人像一般以比较成熟的形象或者职场形象为主,其他风格的形象适用的就较少一点,拍摄经常会选择夜景,表现灯火阑珊的都市感。

声明:易趣百科所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系315127732@qq.com
广告位招租
横幅广告