漢字不能程式設計?只是看著有點豪橫!容易被開除!

小傅哥發表於2020-06-02

作者:小傅哥
部落格:https://bugstack.cn

沉澱、分享、成長,讓自己和他人都能有所收穫!?

一、前言

在程式設計的路上你是否想過,用漢字寫一寫程式碼?

最近有初學程式設計的小夥伴問小傅哥,漢字可以寫程式碼嗎。自己英文不好,要是漢字可以寫程式碼就好了。難道你要的是易語言?其實並不是,小夥伴也是學習 Java 的初學者,剛剛學習到 Spring 看著一片沒有註釋的程式碼實在不好理解,要是都是漢字寫的,那不和讀作文一樣了嗎!

說道註釋,我想到大部分程式設計師討厭的兩件事

  1. 不喜歡寫註釋
  2. 不喜歡別人不寫註釋

其實對於學習程式設計來說,初學時寫寫案例,完成簡單的功能,反覆練習夯實基礎。數學和英文都還並不是你的絆腳石,因為你不需要做複雜的邏輯處理,比如演算法。也不需要查閱大量的資料,比如原版的英文資料以及國內沒有翻譯的技術書籍等。所以這個時候對你來說,只是需要不斷的學,不斷的寫。並逐步強加自己的數學和英文能力。

回到我們的說的,既然你問漢字可以寫程式碼嗎。其實在 java 裡,原則上你可以寫漢字的屬性方法JVM虛擬機器也是可以通過編譯執行的。只是這樣的程式碼並不能很好的維護,甚至說亂碼了也很麻煩。再者,有人寫方言怎麼辦!

好!那麼我們接下來就使用漢字的方式來編寫一段關於 SpringAop 的案例!

二、開發環境

  1. JDK 1.8.0
  2. Spring 4.3.24.RELEASE
  3. 本篇涉及的原始碼下載,可以關注公眾號bugstack蟲洞棧 獲取,並且還可以獲取更多原創案例。

三、技術實現

為了這個案例更加真實,我們模擬電影清朝韋小寶時期,太監入宮的過程。說白了也就是 SpringAOP 面向切面,的程式設計。

在做案例之前,我們先了解一下 AOP 的基本概念;

  1. @Aspect,定義切面的註解
  2. @Pointcut,切入點,一般會在方法上設定萬用字元表示式
  3. @Around,環繞,也就是你原本的方法會在這裡處理
  4. @Before,前置處理
  5. @After,後置處理

1. 定義切面

紫禁城.內務府.敬事房.臏.太監臏.淨身監管.java

@Aspect
@Component
public class 淨身監管 {

    @Pointcut("execution(public * 紫禁城.內務府.敬事房.利器庫..*.軍刺切(..))")
    public void 監管員(){

    }

    @Before("監管員()")
    public void 敬事前(){
        System.out.println("敬事前:---------準備下刀... ...");
    }

    @After("監管員()")
    public void 敬事後(){
        System.out.println("敬事後:---------切面完成... ...");
    }

    @Around("監管員()")
    public Object aroundMethod(ProceedingJoinPoint pjp) throws Throwable {

        System.out.println("待切身份:"+pjp.getArgs()[0]);
        System.out.println("執行工具:"+pjp.getSignature().getName());

        //獲得傳遞物件,並做處理
        太監臏 太監 = (太監臏) pjp.getArgs()[0];
        SimpleDateFormat timeFormat = new SimpleDateFormat("yyyy-MM-dd");
        太監.set敬事日期(timeFormat.format(new Date()));

        //此處可以傳遞更改後的引數
        Object obj = pjp.proceed(new Object[]{太監});

        return obj;

    }

}
  • @Aspect,定義切面類,用於處理程式中的切面程式設計操作。
  • @Pointcut("execution(public * 紫禁城.內務府.敬事房.利器庫..*.軍刺切(..))"),定義切點處,對那些方法進行執行切面操作。除了這樣的操作外,還可以定義成自定義註解。那麼後續只要把某個你需要的方法上面新增這樣的自定義註解,就可以被 AOP 攔截。
  • @Before("監管員()")@After("監管員()"),記錄切面執行前後的記錄。
  • @Around("監管員()"),用於環繞方法增強,可以這裡去處理方法中的一些屬性資訊,比如新增給某個欄位新增時間。太監.set敬事日期(timeFormat.format(new Date()));

2. 設定切面可執行方法

紫禁城.內務府.敬事房.利器庫.切除器具.java

@Component("切除")
public class 切除器具 {

    public 太監臏 軍刺切(太監臏 太監){
        太監.set性別(宦官.太監.name());
        System.out.println("... 啊 ... ...老子被切面了!"+太監.get姓名());
        return 太監;
    }

}
  • 這裡類的方法就是上面定義的切點,Pointcut,也就是會被切面處理的方法。

3. 執行切面操作類

紫禁城.內務府.敬事房.執刀人.張三丰執刀.java

public class 張三丰執刀 {

    public static void main(String[] args) {

        ApplicationContext ctx = new ClassPathXmlApplicationContext("皇太極.xml");

        太監刑 太監行刑 = ctx.getBean("太監刑",太監刑.class);

        太監臏 太監 = new 太監臏();
        太監.set姓名("小德張");
        太監.set年齡("9");
        太監.set性別(宦官.男.name());

        太監 = 太監行刑.執行切除(太監);

        System.out.println("\r\n切除狀態:"+太監);
    }

}
  • 首先這裡定義了獲取 Spring 註解的 Application,用於我們獲取 Bean
  • 接下來定義一個物件類,主要傳遞具體引數資訊交給執行切面的方法,進行操作。
  • 最後輸出結果資訊,也就是我們可以看到具體被切面操作的方法。

四、測試結果

1. 執行內容

啟動方法;紫禁城.內務府.敬事房.執刀人.張三丰執刀.java

待切身份:太監臏 [姓名=小德張, 年齡=9, 性別=男, 敬事日期=]
執行工具:軍刺切
敬事前:---------準備下刀... ...
... 啊 ... ...老子被切面了!小德張
敬事後:---------切面完成... ...

切除狀態:太監臏 [姓名=小德張, 年齡=9, 性別=太監, 敬事日期=2020-05-05]

Process finished with exit code 0

2. 效果圖

切面執行效果圖

五、總結

  • 漢字程式設計,好奇可以試試,但別真的用到專案裡。本文也只是通過這樣的例子,向你展示學習過程的樂趣,建立一些學習過程的好感。

  • 最近加了很多剛入門學習程式設計的小夥伴,有很多小問號。比如;

    切面執行效果圖

    我是非常建議先跑起來,多寫程式碼後再慢慢的去探究原理!

  • 最近聽到一首詩,不錯;廿四橋邊廿四風,憑欄猶憶舊江東。夕陽返照桃花渡,柳絮飛來片片紅。,白色的柳絮在夕陽桃花的映襯下就是成了片片紅。只要你敢學識淵博,就敢讓你擁有翻江倒海之力。

六、彩蛋

CodeGuide | 程式設計師編碼指南 Go!

本程式碼庫是作者小傅哥多年從事一線網際網路 Java 開發的學習歷程技術彙總,旨在為大家提供一個清晰詳細的學習教程,側重點更傾向編寫Java核心內容。如果本倉庫能為您提供幫助,請給予支援(關注、點贊、分享)!

CodeGuide | 程式設計師編碼指南

七、推薦閱讀

相關文章