編程學習雜燴

1. 面向過程編程方法 ~ 面向對象編程方法 ~ 函數式編程javascript

軟件設計思想: 函數-- 對象-- 組件- 服務
[1]. 面向過程編程:編程範式,結構化開發方法,面向功能的程序設計、面向數據流的處理方式,按功能分析系統需求,自頂向下、逐步求精、模塊化,結構化分析、結構化設計、結構化編程,最小的程序單元是函數,一切以函數爲中心、函數最大;
[2]. 面向對象編程:編程範式,Object-Oreinted Programming,基於代碼重用的須要,最小的程序單元是類,類定義=成員變量(狀態數據)+方法(行爲),一切以對象爲中心、對象最大,面向對象分析、面向對象設計、結構化面向對象編程,高內聚、低耦合,封裝(Encapsulation)、繼承(Inheritance)、多態(Polymorphism),消息是對象之間相互通訊的機制、繼承是類之間共享屬性和操做的機制;
[3]. 基於組件開發:Component-Based Development,軟件工程實踐,組件是對功能的抽象,設計時一般要求組件之間高內聚鬆耦合。關注系統層次、子系統邊界和子系統間通信的的設計,處於代碼層面。  
[4]. 面向服務架構:SOA, Service-Oriented Architecture, 基於組件的模型,粒度最大,模塊化系統結構一組可互操做的服務的原則或方法論,是建立面向服務應用程序的最佳實踐,一般在考慮系統架構時纔會觸及SOA。做爲一種進行系統開發的新的體系架構,具體應用程序的功能由鬆耦合而且具備統一接口定義方式的組件(也就是Service)經過服務之間定義良好的接口和契約組合構建。SOA主要用於分佈式系統的構建,設計者只須要經過集成各類服務便可完成系統的構建。
[5]. 函數式編程:下一個主流編程範式(programming paradigm),"結構化編程"的一種,函數是"第一等公民"(first class functions),函數相對獨立、沒有"反作用",模塊化、自由度高、易於理解,易於部署"併發編程"(concurrency)。 函數式編程 - sqh;  

2.  預處理html

預處理指令 PreProcessor Directive 指示編譯器如何處理源代碼。 java

條件編譯指令:#if, #else, #elif, #endif
診斷指令:#warning, #error
行號指令:#line
區域指令:#region, #endregion
#pragma warning disable/restore:關閉或從新開啓警告信息 

3.  數組 Array - 鏈表 List 等集合類的輸出方法總結編程

Java數組

arr = lst.Where(過濾條件).ToArray();
Array.ForEach(arr, val => Console.Write(val+" "));

lst = arr.Where(過濾條件).ToList();
lst.ForEach(val => Console.Write(val+" "));

Javamarkdown

遍歷 Collection 對象 Collection c = new 派生類();的方法:
  [1].System.out.println(c);
  [2].利用"foreach"循環:for(Object obj : c)
  [3].利用對象的實例方法 forEach():c.forEach(Lambda表達式) 或 c.forEach(System.out::println);
  [4].利用 Iterator 接口的 forEachRemaining() 方法:it.forEachRemaining(Lambda表達式);架構

4. 轉義字符:\n 和 \r併發

  • \n 換行,\r 回車(把光標移動到該行的首位置)
  • 在 win 系統中操做文件時,換行須要 \r\n 同時用纔會生效(Environment.NewLine)

5. 關於字典集新增鍵值對 分佈式

(1)Dictionary        
var dic = new Dictionary<string, Object>(); 模塊化

// 若_key不存在,則新增鍵值對<_key, _value>
// 若_key存在,則System.ArgumentException: Dictionary<TKey,TValue> 中已存在具備相同鍵的元素
dic.Add(_key, _value);
// 若_key不存在,則新增鍵值對<_key, _value>
// 若_key存在,則更新鍵_key對應的值爲_value
dic[_key] = _value;

(2)ConcurrentDictionary
var dic = new ConcurrentDictionary<string, Object>();

// 鍵值對成功添加,返回值則爲true,不然爲false
// 即:若_key不存在,返回true;若_key存在,返回false
dic.TryAdd(_key, _value);
// 功能同Dictionary
dic[_key] = _value; 

附帶參考字典集索引功能的源定義

public class Dictionary/ConcurrentDictionary<TKey, TValue> : XXX
{
     // 摘要: 獲取或設置與指定的鍵相關聯的值
     // 參數key: 要獲取或設置的值的鍵
     // 返回結果: 與指定的鍵相關聯的值,若是找不到指定的鍵
     //   get操做會引起System.Collections.Generic.KeyNotFoundException
     //   set操做會建立一個具備指定鍵的新元素
     // 異常:
     //  System.ArgumentNullException: key爲null
     //  System.Collections.Generic.KeyNotFoundException: 已檢索該屬性,而且集合中不存在key
     public TValue this[TKey key] { get; set; }
}

6. 關於Distinct去重

核心是提供通用比較類,實現 IEqualityComparer<T> 接口:

public class CommonEqualityComparer<T, V> : IEqualityComparer<T>
{
    private Func<T, V> keySelector;

    public CommonEqualityComparer(Func<T, V> keySelector)
    {
        this.keySelector = keySelector;
    }

    public bool Equals(T x, T y)
    {
        return EqualityComparer<V>.Default.Equals(keySelector(x), keySelector(y));
    }

    public int GetHashCode(T obj)
    {
        return EqualityComparer<V>.Default.GetHashCode(keySelector(obj));
    }
}

而後再應用擴展方法,新增Distinct方法(此處注意理解擴展方法的原理)

public static IEnumerable<T> Distinct<T, V>(this IEnumerable<T> source, Func<T, V> keySelector)
    {
        return source.Distinct(new CommonEqualityComparer<T, V>(keySelector));
    }

而後能夠優雅地使用:

list = list.Distinct(p => p.Name).ToList();

具體參見:奇思妙用:Distinct 擴展

相關文章
相關標籤/搜索