提4點Android代碼規(guī)范

前言

良好的規(guī)范,就像軍隊紀律。
所謂,沒有規(guī)矩,不成方圓。

在編程中也是一樣的,良好的代碼規(guī)范總是能給人賞心悅目。哪怕讀不懂代碼,或者寫的代碼不夠優(yōu)秀,但給保持一個標準的規(guī)范也算一種態(tài)度。就像書面整潔一樣,在高考中還能加分呢。

下面,我們開始修煉吧~

1、縮進、換行:

  1. 縮進 保持 ==4== 個字符。

  2. 換行 有些代碼句(語句、條件表達式、方法參數(shù))太長,可選擇性換行。我們可規(guī)定為 ==>150== 字符換行。

    • 條件表達式:以操作符作為換行的開頭。如果有多行,則每換一行,比上一行條件表達式的首字符增加縮進 ==2== 字符,成階梯式,清晰。低優(yōu)先級操作符處開始換行為宜;信息分組處換行。 即:
    if (isIgnoreRules && hasChangedContent() 
          || mOldCount < mNewCount) {
        // TO-DO         
    }
    
    • 方法參數(shù):
    public static void putData(int newsId, String newsTitle, String newsContent,
                               String from, String to) { 
        // TO-DO   
    }
    
    • {}的換行,特別注意try-catch-finally
    public void queryFromSQLite() {
        try {
            // TO-DO        
        } catch (Exception e) {     
            // cautch excetpion
        } finally {
            // release
        }
    }
    

2 、條件+循環(huán),避免多層嵌套:

  1. 長代碼+多層嵌套,在程序塊}后加注釋標記,便于閱讀。
  2. 一個方法里嵌套最好不要超過3層, ==最優(yōu)2層== !
    如:
    public void caculate() {
        if (!isNeedReCaculate) {
            return;
        }
        if (null != mData) {
            Object obj;
            for (int i = 0, size = mData.size(); i < size; i++) {
                obj = mData.get(i);
                if (null == obj) {
                    continue;
                }
                ...
            } // # End of for
        } // # End of (null != mData)
    }
    

3、資源規(guī)范

  1. colors.xml:
    忌寫:

    <resources>
      <color name="button_foreground">#FFFFFF</color>
      <color name="button_background">#2A91BD</color>
      <color name="comment_background_inactive">#5F5F5F</color>
      <color name="comment_background_active">#939393</color>
      <color name="comment_foreground">#FFFFFF</color>
      <color name="comment_foreground_important">#FF9D2F</color>
      ...
    <resources>
    

    可重用:

    <resources>
    
      <!-- grayscale -->
      <color name="white"     >#FFFFFF</color>
      <color name="gray_light">#DBDBDB</color>
      <color name="gray"      >#939393</color>
      <color name="gray_dark" >#5F5F5F</color>
      <color name="black"     >#323232</color>
    
      <!-- basic colors -->
      <color name="green">#27D34D</color>
      <color name="blue">#2A91BD</color>
      <color name="orange">#FF9D2F</color>
      <color name="red">#FF432F</color>
    
    </resources>
    
  1. string.xml:

  2. layout.xml:

    • id命名模式為: ==view縮寫模塊名邏輯名==,比如 btn_contact_search。同時,java中聲明對應的view的命名規(guī)則與之反向,即 ==邏輯名_模塊名_view縮寫==,比如 mSearchContactBtn。再者,這樣有一個好處——容易對應,
      如view的聲明:
    Button mSearchContactBtn = findViewById(R.id.btn_contact_search);
    

    當然,我個人更喜歡這種格式:
    ==1. view的id命名:{模塊名}{邏輯名}{view的縮寫}==
    ==2. view在java中命名:m{View的縮寫}{模塊名}{邏輯名}==
    個人覺得這樣更好,比如當搜索某個按鈕時,你只需鍵入mBtn然后,IDE就會自動補全提示所有的btn變量。

    Button mBtnSearchContact = findViewById(R.id.contact_search_btn);
    

4、 分包管理

參考Google I/O 2015的代碼結構,按功能分包具體可以這樣做:

src
└─com
    └─domain
        └─app
            │  AppApplication.java  定義Application類
            │  Config.java          定義配置數(shù)據(jù)(常量)
            │
            ├─framework
            │      定義interface以及相關基類
            │
            ├─io
            │      數(shù)據(jù)定義(model)、數(shù)據(jù)操作(比如json解析,但不包括db操作)
            │
            ├─model
            │      定義model(數(shù)據(jù)結構以及getter/setter、compareTo、equals等等,不含復雜操作)
            │      以及modelHelper(提供便于操作model的api)
            │
            ├─provider
            │      實現(xiàn)ContentProvider,及其依賴的db操作
            │
            ├─receiver
            │      實現(xiàn)Receiver
            │
            ├─service
            │      實現(xiàn)Service(比如IntentService),用于在獨立線程中異步do stuff
            │
            ├─ui
            │      實現(xiàn)BaseActivity,以及自定義view和widget,相關的Adapter也放這里
            │
            ├─util
            │      實現(xiàn)工具類,提供靜態(tài)方法
            │
            ├─feature1
            │      Item.java                定義model
            │      ItemHelper.java          實現(xiàn)modelHelper
            │      feature1Activity.java    定義UI
            │      feature1DAO.java         私有db操作
            │      feature1Utils.java       私有工具函數(shù)
            │      ...其它私有class
            │
            ├─...其它feature

另外,google的sample~iosched:

java
└─com
    └─google
        └─samples
            └─apps
                └─iosched
                    │  AppApplication.java  定義Application類
                    │  Config.java          定義配置數(shù)據(jù)(常量)
                    │
                    ├─about
                    │      AboutActivity.java
                    │
                    ├─appwidget
                    │      ScheduleWidgetProvider.java
                    │      ScheduleWidgetRemoteViewsService.java
                    │
                    ├─debug
                    │  │  DebugAction.java
                    │  │  DebugActivity.java
                    │  │  DebugFragment.java
                    │  │
                    │  └─actions
                    │          DisplayUserDataDebugAction.java
                    │          ForceAppDataSyncNowAction.java
                    │          ForceSyncNowAction.java
                    │          ...
                    │
                    ├─explore
                    │  │  ExploreIOActivity.java
                    │  │  ExploreIOFragment.java
                    │  │  ExploreModel.java
                    │  │  ...
                    │  │
                    │  └─data
                    │          ItemGroup.java
                    │          LiveStreamData.java
                    │          MessageData.java
                    │          ...
                    │
                    ├─feedback
                    │      FeedbackApiHelper.java
                    │      FeedbackConstants.java
                    │      FeedbackHelper.java
                    │      ...
                    │
                    ├─framework
                    │      FragmentListener.java
                    │      LoaderIdlingResource.java
                    │      Model.java
                    │      ...定義interface并實現(xiàn)
                    │
                    ├─gcm
                    │  │  GCMCommand.java
                    │  │  GCMIntentService.java
                    │  │  GCMRedirectedBroadcastReceiver.java
                    │  │  ...
                    │  │
                    │  └─command
                    │          AnnouncementCommand.java
                    │          NotificationCommand.java
                    │          SyncCommand.java
                    │          ...
                    │
                    ├─io
                    │  │  BlocksHandler.java
                    │  │  HandlerException.java
                    │  │  HashtagsHandler.java
                    │  │  ...處理model
                    │  │
                    │  ├─map
                    │  │  └─model
                    │  │          MapData.java
                    │  │          Marker.java
                    │  │          Tile.java
                    │  │
                    │  └─model
                    │          Block.java
                    │          DataManifest.java
                    │          Hashtag.java
                    │          ...
                    │
                    ├─map
                    │  │  InlineInfoFragment.java
                    │  │  MapActivity.java
                    │  │  MapFragment.java
                    │  │  ...
                    │  │
                    │  └─util
                    │          CachedTileProvider.java
                    │          MarkerLoadingTask.java
                    │          MarkerModel.java
                    │          ...
                    │
                    ├─model
                    │      ScheduleHelper.java
                    │      ScheduleItem.java
                    │      ScheduleItemHelper.java
                    │      ...定義model以及實現(xiàn)model相關操作
                    │
                    ├─myschedule
                    │      MyScheduleActivity.java
                    │      MyScheduleAdapter.java
                    │      MyScheduleFragment.java
                    │      ...
                    │
                    ├─provider
                    │      ScheduleContract.java
                    │      ScheduleContractHelper.java
                    │      ScheduleDatabase.java
                    │      ...實現(xiàn)ContentProvider
                    │      (也在此處定義provider依賴的其它類,比如db操作)
                    │
                    ├─receiver
                    │      SessionAlarmReceiver.java
                    │
                    ├─service
                    │      DataBootstrapService.java
                    │      SessionAlarmService.java
                    │      SessionCalendarService.java
                    │
                    ├─session
                    │      SessionDetailActivity.java
                    │      SessionDetailConstants.java
                    │      SessionDetailFragment.java
                    │      ...
                    │
                    ├─settings
                    │      ConfMessageCardUtils.java
                    │      SettingsActivity.java
                    │      SettingsUtils.java
                    │
                    ├─social
                    │      SocialActivity.java
                    │      SocialFragment.java
                    │      SocialModel.java
                    │
                    ├─sync
                    │  │  ConferenceDataHandler.java
                    │  │  RemoteConferenceDataFetcher.java
                    │  │  SyncAdapter.java
                    │  │  ...
                    │  │
                    │  └─userdata
                    │      │  AbstractUserDataSyncHelper.java
                    │      │  OnSuccessListener.java
                    │      │  UserAction.java
                    │      │  ...
                    │      │
                    │      ├─gms
                    │      │      DriveHelper.java
                    │      │      GMSUserDataSyncHelper.java
                    │      │
                    │      └─util
                    │              UserActionHelper.java
                    │              UserDataHelper.java
                    │
                    ├─ui
                    │  │  BaseActivity.java
                    │  │  CheckableLinearLayout.java
                    │  │  SearchActivity.java
                    │  │  ...BaseActivity以及自定義UI組件
                    │  │
                    │  └─widget
                    │          AspectRatioView.java
                    │          BakedBezierInterpolator.java
                    │          BezelImageView.java
                    │          ...自定義小UI控件
                    │
                    ├─util
                    │      AboutUtils.java
                    │      AccountUtils.java
                    │      AnalyticsHelper.java
                    │      ...工具類,提供靜態(tài)方法
                    │
                    ├─videolibrary
                    │      VideoLibraryActivity.java
                    │      VideoLibraryFilteredActivity.java
                    │      VideoLibraryFilteredFragment.java
                    │      ...
                    │
                    └─welcome
                            AccountFragment.java
                            AttendingFragment.java
                            ConductFragment.java
                            ...

最后,

參考:

——————創(chuàng)建于 2017/04/20 by hsong
——————更新于 2021/03/22 by hsong

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評論 25 708
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 15,631評論 4 61
  • 早上好!#幸福實修#~每天進步1%#幸福實修12班-02-駱金芳--富陽# 20171009(14/60) 【幸福...
    幸福實修金芳閱讀 214評論 0 2
  • Model.h #import <Foundation/Foundation.h>@interface Model...
    CGPointZero閱讀 972評論 0 2
  • 最近好萊塢似乎掀起了一股顛覆童話的潮流。 原本的童話故事總是很美好的,而且這種美好總是有一個固定的模式的,比如好人...
    LostAbaddon閱讀 897評論 2 2

友情鏈接更多精彩內(nèi)容