Android journey 1@关于编码风格和命名规范

/*

* 1.关于编程风格:每一位程序猿可能都有自己独特的编程风格,但是有些规则是大家都必须遵守的,特别

*   是在工作的过程中,良好的代码风格能大大提高代码本身的可阅读性和维护性,也更有利于别人修改你

*   的代码。风格问题涉及到的都是细节相关的问题,读者朋友们或许都听过“细节决定成败”这句话,这句话

*   在这里同样生效,不过是换了种意思,就是“细节体现你的专业程度”,所以作为一名程序猿,我们应该从

*   编写代码的训练中养成良好的编码习惯,如命名规范,排版规范,写好注释等。下面具体说明下:

*/

/*

* 1)整个Project相关内容的目录规范:(通常可以包含以下几个文件夹)

*    #.Requirement Doc: project的需求文档说明

*    #.Design:有关设计方面的说明

*    #.Planning&Log:计划、日志、会议等

*    #.Test:测试及其报告

*    #.Study:学习资料及demo

*    #.Deployment:发布,部署

*    #.src: 源代码

*    #.help:帮助文档

*    #. ...(根据自己需求添加合适文档)

*    注意事项:在IDE建立project的时候,包即目录(java),包名全小写,且一般不超过3层,命名为:【公司】.【项目】.【模块】

*/

/*

* 2)命名规范:

*    #、Pascal命名法:每个单词首字母大写,其余小写,如“ActivityDemo”,主要应用于:文件名,普通类名,构造函数等

*    #、Camel命名法:第一个单词全小写,其余单词按pascal命名,如“myName”,主要应用于:方法名(动宾短语),普通函数名等

*    #、匈牙利命名法(使用前缀,后缀命名):如对于整型变量,可以“int intMyAge;”

*    #、下划线命名法:主要在常量(全大写)中使用,分隔两个不同单词

*    其他常见命名:私有成员变量:“mMyName”;静态变量:“sMyName”;方法参数:“pMyName”;

*    当然命名规则的使用主要看已有项目的要求,若新启动一个项目,编码前团队必须先统一命名规范

*/

/*

* 3)其他需要注意的地方:

*   1、一个方法不超过35行代码

*   2、不要去修改机器自动生成的代码

*   3、final String取代String,即不要直接写字符串

*   4、循环语句中不用return

*   5、属性用set(),get()方法操控

*   6、不要再系统生成函数中写复杂代码,复杂代码通常用函数调用解决

*   7、虽然class能搞定一切,但使用接口暴露信息会更好

*   8、switch语句中无论如何都要有default

*   9、同类的import包放在一起

*   ...
* */ //下面看一下Android源码中的代码: /* * Copyright (C) 2006 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.app; import com.android.internal.app.ActionBarImpl; import com.android.internal.policy.PolicyManager; import android.os.Build; import android.os.Bundle; import android.os.UserHandle; import android.text.Selection; import android.text.SpannableStringBuilder; import android.text.TextUtils; import android.text.method.TextKeyListener; import android.util.AttributeSet; import android.util.EventLog; /**可在注释中嵌入HTML标签,在生成javadoc的时候控制各种属性等 * An activity is a single, focused thing that the user can do. Almost all * activities interact with the user, so the Activity class takes care of * creating a window for you in which you can place your UI with * {@link #setContentView}. While activities are often presented to the user * as full-screen windows, they can also be used in other ways: as floating * windows (via a theme with {@link android.R.attr#windowIsFloating} set) * or embedded inside of another activity (using {@link ActivityGroup}). * * There are two methods almost all subclasses of Activity will implement: * * <ul> * <li> {@link #onCreate} is where you initialize your activity. Most * importantly, here you will usually call {@link #setContentView(int)} * with a layout resource defining your UI, and using {@link #findViewById} * to retrieve the widgets in that UI that you need to interact with * programmatically. * * <li> {@link #onPause} is where you deal with the user leaving your * activity. Most importantly, any changes made by the user should at this * point be committed (usually to the * {@link android.content.ContentProvider} holding the data). * </ul> ... */ public class Activity extends ContextThemeWrapper implements LayoutInflater.Factory2, Window.Callback, KeyEvent.Callback, OnCreateContextMenuListener, ComponentCallbacks2 { private static final String TAG = "Activity"; private static final boolean DEBUG_LIFECYCLE = false; /** Standard activity result: operation canceled. */ //常量命名 public static final int RESULT_CANCELED = 0; /** Standard activity result: operation succeeded. */ public static final int RESULT_OK = -1; /** Start of user-defined activity results. */ public static final int RESULT_FIRST_USER = 1; static final String FRAGMENTS_TAG = "android:fragments"; private static final String WINDOW_HIERARCHY_TAG = "android:viewHierarchyState"; private static final String SAVED_DIALOG_IDS_KEY = "android:savedDialogIds"; private static final String SAVED_DIALOGS_TAG = "android:savedDialogs"; private static final String SAVED_DIALOG_KEY_PREFIX = "android:dialog_"; private static final String SAVED_DIALOG_ARGS_KEY_PREFIX = "android:dialog_args_"; private static class ManagedDialog { Dialog mDialog; Bundle mArgs; } private SparseArray<ManagedDialog> mManagedDialogs; // set by the thread after the constructor and before onCreate(Bundle savedInstanceState) is called. //私有变量命名 private Instrumentation mInstrumentation; private IBinder mToken; private int mIdent; static final class NonConfigurationInstances { Object activity; HashMap<String, Object> children; ArrayList<Fragment> fragments; HashMap<String, LoaderManagerImpl> loaders; } /* package */ NonConfigurationInstances mLastNonConfigurationInstances; private Window mWindow; /** * Change the intent returned by {@link #getIntent}. This holds a * reference to the given intent; it does not copy it. Often used in * conjunction with {@link #onNewIntent}. * * @param newIntent The new Intent object to return from getIntent * * @see #getIntent * @see #onNewIntent *自定义javadoc标签 *@author .. *@date .. *@modify ..(who,when..) */ public void setIntent(Intent newIntent) { mIntent = newIntent; }


你可能感兴趣的:(android)