每天推薦一個 GitHub 優質開源項目和一篇精選英文科技或編程文章原文,歡迎關注開源日報。交流QQ群:202790710;電報群 https://t.me/OpeningSourceOrg


今日推薦開源項目:《 簡潔即正義——Android-KTX》

推薦理由:這是一套用於Android應用開發的 Kotlin 擴展。目的就是為了讓我們使用 Kotlin 進行簡潔、愉悅、慣用地 Android 開發,而不會增加新的功能。

原理介紹

透過現象看本質,這樣使用起來就不會迷惑,而且遇到問題也能方便排查。

Android-ktx主要使用Kotlin語言的幾個特性,了解了這些特性後,我們自己也能很方便的進行封裝,這樣就形成了我們自己的類庫,便於自己技術的沉澱。

Extensions

上面的第一個例子,uri的封裝就是利用了這個,Kotlin的官方文檔也有介紹。

直接看源碼就行了。

inline fun String.toUri(): Uri = Uri.parse(this)

其實就是對String做了一個擴展,如果使用Java的就很容易理解,如下所示,這種方式在日常開發中也很容易見到。

public class StringUtil{
    public static Uri parse(String uriString) {
        return Uri.parse(uriString);
    }
}

Lambdas

第二個例子主要使用了Lambdas這個特性,Kotlin文檔在這裡

還是貼代碼,首先對SharedPreferences做了擴展,然後這個擴展函數的參數是一個閉包,當函數最後一個參數是閉包的時候,函數的括弧可以直接省略,然後在後面接上閉包就行了。

inline fun SharedPreferences.edit(action: SharedPreferences.Editor.() -> Unit) {
    val editor = edit()
    action(editor)
    editor.apply()
}

Default Arguments

這個特性上面的例子沒有,可以單獨列舉,如下所示。(官方文檔介紹)

也是就說,當一個函數中含有多個參數時候,不需要像Java中那樣,依次賦值,可以僅僅賦需要的即可,Java中常見的解決的方法是方法重載,挨個傳入默認值。

class ViewTest {
    private val context = InstrumentationRegistry.getContext()
    private val view = View(context)

    @Test
    fun updatePadding() {
        view.updatePadding(top = 10, right = 20)
        assertEquals(0, view.paddingLeft)
        assertEquals(10, view.paddingTop)
        assertEquals(20, view.paddingRight)
        assertEquals(0, view.paddingBottom)
    }
}

updatePadding方法定義。

fun View.updatePadding(
    @Px left: Int = paddingLeft,
    @Px top: Int = paddingTop,
    @Px right: Int = paddingRight,
    @Px bottom: Int = paddingBottom
    ) {
    setPadding(left, top, right, bottom)
}

對於默認參數,還可以這樣玩,比如在Java中,常見的有建造在模式,對每個參數進行賦值,然後創建一個對象,如果使用這種特性,不需要改變的值,可以直接用默認值表示,這樣在編碼的時候,就會顯得很簡潔。

優勢:

作為Android開發語言,kotlin本身就是一門非常簡潔的開發語言,而Android-KTX使得kotlin更加的簡潔,代碼更加的精簡。

我們可以看到官方給出的一組對比:

Kotlin:

val uri = Uri.parse(myUriString)

Kotlin with Android KTX:

val uri = myUriString.toUri()

Kotlin:

sharedPreferences.edit()
    .putBoolean("key", value)
    .apply()

Kotlin with Android KTX:

sharedPreferences.edit {
    putBoolean("key", value)
}

Kotlin:

val pathDifference = Path(myPath1).apply {
    op(myPath2, Path.Op.DIFFERENCE)
}

canvas.apply {
    val checkpoint = save()
    translate(0F, 100F)
    drawPath(pathDifference, myPaint)
    restoreToCount(checkpoint)
}

Kotlin with Android KTX:

val pathDifference = myPath1 - myPath2

canvas.withTranslation(y = 100F) {
    drawPath(pathDifference, myPaint)
}

Kotlin:

view.viewTreeObserver.addOnPreDrawListener(
    object : ViewTreeObserver.OnPreDrawListener {
        override fun onPreDraw(): Boolean {
            viewTreeObserver.removeOnPreDrawListener(this)
            actionToBeTriggered()
            return true
        }
    })

Kotlin with Android KTX:

view.doOnPreDraw {
    actionToBeTriggered()
}

非常明顯的可以看出,Android-KTX使得代碼更加的簡潔。

Android-KTX在Android框架和支持庫上提供了一個良好的API層,這使得代碼更加簡潔,Android-KTX中支持的Android框架的部分現在可在GitHub庫中找到,同時,Google承諾在即將到來的支持庫版本中提供涵蓋Android支持庫的Android-KTX其他部分。

注意:

這個庫並不是最終正式版本,可能會有API的規範性改動或者移除,打算用這個來實現一些項目的朋友也注意這一定,畢竟,第一個吃螃蟹的人是有風險的。

不過谷歌表示,現在的預覽版本只是一個開始,在接下來的幾個月里,他們會根據開發者的反饋和貢獻加入 API 進行迭代,當 API 穩定後,Google 會承諾 API 的兼容性,並計劃將 Android KTX 作為 Android 支持庫的一部分。

關於kotlin:

kotlin是一個由JetBrains開發,基於JVM的編程語言,與Java編程語言100%互通,並具備諸多Java尚不支持的新特性,適用於如今使用Java的所有環境,常用於編寫伺服器端代碼和Android應用。Kotlin還得到了谷歌的支持,已正式成為Android開發一級語言。作為一個簡潔的語言,Kotlin支持 lambda,支持閉包,能夠減少代碼量,提高我們的開發效率。

進入官網了解更多:kotlin官網


今日推薦英文原文:《7 Super Useful Aliases to make your development life easier》作者:Al-min Nowshad

原文鏈接:https://codeburst.io/7-super-useful-aliases-to-make-your-development-life-easier-fef1ee7f9b73

7 Super Useful Aliases to make your development life easier

 

npm install --save express
sudo apt-get update
brew cask install docker

Commands like these are our daily routine. Software Developer, Dev ops, Data Scientists, System Admin or in any other profession, we need to play with a few regular commands again and again.

It』s tiresome to write these commands every time we need them ?

Wouldn』t it be better if we could use some kind of shortcuts for these commands?

Meet Your Friend — Alias

What if I tell you that you can use

nis express

Instead of

npm install --save express

Stay with me, we』ll find out how ?

What』s alias ?

It』s a text-only interface for your terminal or shell commands that can be mapped with longer and more complex commands under the hood!

How ?

Open your terminal and type alias then press Enter

You』ll see a list of available aliases on your machine.

If you look closely you』ll find a common pattern to use aliases -

alias alias_name="command_to_run"

So, we』re simply mapping commands with names! (almost)

Let』s Create a few

NOTE: For the purpose of this tutorial, please keep your terminal open and use one terminal to test these aliases. use cd if you need to change directory.

1. Install node Packages

npm install --save packagenamenis packagename
Type the command below in your terminal and press Enter -

alias nis="npm install --save "

Now, we can use nis express to install express inside your node project.

2. Git add and commit

git add . && git commit -a -m "your commit message"
gac "your commit message"

alias gac="git add . && git commit -a -m "

3. Search Through Terminal History

history | grep keywordhs keyword

alias hs='history | grep'

Now, if we need to search thorough our history to find everything with the keyword test we just have to execute hs test to find our expected result.

4. Make and enter inside a directory

mkdir -p test && cd testmkcd test

alias mkcd='foo(){ mkdir -p "$1"; cd "$1" }; foo '

5. Show my ip address

curl http://ipecho.net/plainmyip

alias myip="curl http://ipecho.net/plain; echo"

6. Open file with admin access

sudo vim filenamesvim filename

alias svim='sudo vim'

7. Update your linux pc/server

sudo apt-get update && sudo apt-get updateupdate

alias update='sudo apt-get update && sudo apt-get upgrade'

Persistant Aliases

You』ve learnt how to create aliases. Now it』s time to make them persistent throughout your system. Depending on what type of shell/terminal you』re using you need to copy-paste your aliases inside ~/.bashrc or ~/.bashprofile or ~/.zshrc if you』re using zsh as your default terminal.

Example:

As I』m using zsh as my default terminal, I』ve to edit ~/.zshrc file to add my aliases. First of all let』s open it with admin access with sudo vim ~/.zshrc .

Now, I need to paste my alias/aliases like alias hs='history | grep' then exit with saving by entering :wq inside vim

Then to take effect I need to execute source ~/.zshrc and restart my terminal. From now on, the hs command will be available throughout my system ?

Bonus

oh-my-zsh is a great enhancement for your terminal which comes with some default aliases and beautiful interface.

 


每天推薦一個 GitHub 優質開源項目和一篇精選英文科技或編程文章原文,歡迎關注開源日報。交流QQ群:202790710;電報群 https://t.me/OpeningSourceOrg