js代碼重構(gòu)java 前端代碼重構(gòu)

如何將這些JS代碼轉(zhuǎn)換成JAVA代碼

javascript 和java都不是一個(gè)道理的,不是說(shuō)轉(zhuǎn)換就可以的,為什么很多人喜歡跨語(yǔ)言轉(zhuǎn)換代碼,你們?yōu)槭裁床荒苓@樣問(wèn)呢:如何用java來(lái)實(shí)現(xiàn)某種功能,豈不是更好?

茄子河ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

js代碼轉(zhuǎn)換為java

理解他的原理就好寫了。

所有參數(shù)?排除?時(shí)間戳,按照字母順序排序,然后連接起來(lái)?和?appKey?以及?appSercet?進(jìn)行md5?運(yùn)算。

排序可以使用?String?[]keys?=?map.keyset().toarray()?獲取后使用?Collections?進(jìn)行sort。

有個(gè)類似的,可以參考一下:

public?static?boolean?signVerify(String?appSecret,MapString,?String?params){

MapString,?String?map=new?HashMapString,?String();

map.put("appSecret",?appSecret);

for(String?key:params.keySet()){

if(!key.equals("sign")){

map.put(key,?params.get(key));

}

}

String?sign=sign(map);

if(sign.equals(params.get("sign"))){

return?true;

}

return?false;

}

private?static?String?toHexValue(byte[]?messageDigest)?{

if?(messageDigest?==?null)

return?"";

StringBuilder?hexValue?=?new?StringBuilder();

for?(byte?aMessageDigest?:?messageDigest)?{

int?val?=?0xFF??aMessageDigest;

if?(val??16)?{

hexValue.append("0");

}

hexValue.append(Integer.toHexString(val));

}

return?hexValue.toString();

}

/**

?*?

?*?@param?params

?*?@return

?*/

public?static?String?sign(MapString,String?params){

ListString?keys=new?ArrayListString(params.keySet());

Collections.sort(keys);

String?string="";

for(String?s:keys){

string+=params.get(s);

}

String?sign="";

try?{

sign?=?toHexValue(encryptMD5(string.getBytes(Charset.forName("utf-8"))));

}?catch?(Exception?e)?{

e.printStackTrace();

throw?new?RuntimeException("md5?error");

}

return?sign;

}

private?static?byte[]?encryptMD5(byte[]?data)throws?Exception{

MessageDigest?md5?=?MessageDigest.getInstance("MD5");

md5.update(data);

return?md5.digest();

}

public?static?void?main(String[]?args)?{

String?appKey="key";

String?appSecret="secret";

MapString,?String?params=new?HashMapString,?String();

params.put("appKey",?appKey);

params.put("appSecret",?appSecret);

params.put("date",?new?Date().getTime()+"");

String?sign=sign(params);

params.put("sign",?sign);

System.out.println(signVerify(appSecret,?params));

}

js轉(zhuǎn)java代碼

package p1;

import java.util.Arrays;

import java.util.LinkedList;

public class Guy

{

public static void recursionSub ( LinkedListint[] list, int count, int[] array, int ind, int start, int... indexs )

{

start++;

if (start count - 1)

{

return;

}

if (start == 0)

{

indexs = new int[array.length];

}

for ( indexs = ind; indexs array.length; indexs++ )

{

recursionSub (list, count, array, indexs + 1, start, indexs);

if (start == count - 1)

{

int[] temp = new int[count];

for ( int i = count - 1; i = 0; i-- )

{

temp[start - i] = array[indexs[start - i]];

}

list.add (temp);

}

}

}

public static void main ( String[] args )

{

int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

LinkedListint[] list = new LinkedListint[] ();

recursionSub (list, 3, array, 0, -1);

for ( int[] strings : list )

{

System.out.println (Arrays.toString (strings));

}

}

}

java中什么是代碼重構(gòu),什么時(shí)候需要代碼重構(gòu)

代碼重構(gòu)(英語(yǔ):Code refactoring)重構(gòu)就是在不改變軟件系統(tǒng)外部行為的前提下,改善它的內(nèi)部結(jié)構(gòu)。

軟件重構(gòu)需要借助工具完成,重構(gòu)工具能夠修改代碼同時(shí)修改所有引用該代碼的地方。在極限編程的方法學(xué)中,重構(gòu)需要單元測(cè)試來(lái)支持。

java重構(gòu):指程序員對(duì)已有程序在盡量不改變接口的前提下,進(jìn)行重新編寫代碼的工作,一般有以下幾方面:

1、去除已知bug。

2、提高程序運(yùn)行效率。

3、增加新的功能。

重構(gòu)舉例:(簡(jiǎn)化代碼、提升效率)

重構(gòu)前:

if(list != null list.size() 0){

for(int i = 0; i list.size(); i++){

//skip...

}

}

重構(gòu)后

if(list != null){

for(int i = 0, len = list.size(); i len; i++){

//skip...

}

}

何時(shí)著手重構(gòu)(Refactoring)

新官上任三把火,開始一個(gè)全新??、腳不停蹄、加班加點(diǎn),一支聲勢(shì)浩大的千軍萬(wàn)"碼"夾裹著程序員激情和扣擊鍵盤的鳴金奮力前行,勢(shì)如破竹,攻城掠地,直指"黃龍府"。

開發(fā)經(jīng)理是這支浩浩湯湯代碼隊(duì)伍的統(tǒng)帥,他負(fù)責(zé)這支隊(duì)伍的命運(yùn),當(dāng)齊桓公站在山頂上看到管仲訓(xùn)練的隊(duì)伍整齊劃一地前進(jìn)時(shí),他感嘆說(shuō)"我有這樣一支軍隊(duì)哪里還怕沒(méi)有勝利呢?"。但很遺憾,你手中的這支隊(duì)伍原本只是散兵游勇,在前進(jìn)中招兵買馬,不斷壯大,所以隊(duì)伍變形在所難免。當(dāng)開發(fā)經(jīng)理發(fā)覺(jué)隊(duì)伍變形時(shí),也許就是克制住攻克前方山頭的誘惑,停下腳步整頓隊(duì)伍的時(shí)候了。

Kent Beck提出了"代碼壞味道"的說(shuō)法,和我們所提出的"隊(duì)伍變形"是同樣的意思,隊(duì)伍變形的信號(hào)是什么呢?以下列述的代碼癥狀就是"隊(duì)伍變形"的強(qiáng)烈信號(hào):

·代碼中存在重復(fù)的代碼

中國(guó)有118 家整車生產(chǎn)企業(yè),數(shù)量幾乎等于美、日、歐所有汽車廠家數(shù)之和,但是全國(guó)的年產(chǎn)量卻不及一個(gè)外國(guó)大汽車公司的產(chǎn)量。重復(fù)建設(shè)只會(huì)導(dǎo)致效率的低效和資源的浪費(fèi)。

程序代碼更是不能搞重復(fù)建設(shè),如果同一個(gè)類中有相同的代碼塊,請(qǐng)把它提煉成類的一個(gè)獨(dú)立方法,如果不同類中具有相同的代碼,請(qǐng)把它提煉成一個(gè)新類,永遠(yuǎn)不要重復(fù)代碼。

·過(guò)大的類和過(guò)長(zhǎng)的方法

過(guò)大的類往往是類抽象不合理的結(jié)果,類抽象不合理將降低了代碼的復(fù)用率。方法是類王國(guó)中的諸侯國(guó),諸侯國(guó)太大勢(shì)必動(dòng)搖中央集權(quán)。過(guò)長(zhǎng)的方法由于包含的邏輯過(guò)于復(fù)雜,錯(cuò)誤機(jī)率將直線上升,而可讀性則直線下降,類的健壯性很容易被打破。當(dāng)看到一個(gè)過(guò)長(zhǎng)的方法時(shí),需要想辦法將其劃分為多個(gè)小方法,以便于分而治之。

·牽一毛而需要?jiǎng)尤淼男薷?/p>

當(dāng)你發(fā)現(xiàn)修改一個(gè)小功能,或增加一個(gè)小功能時(shí),就引發(fā)一次代碼地震,也許是你的設(shè)計(jì)抽象度不夠理想,功能代碼太過(guò)分散所引起的。

·類之間需要過(guò)多的通訊

A類需要調(diào)用B類的過(guò)多方法訪問(wèn)B的內(nèi)部數(shù)據(jù),在關(guān)系上這兩個(gè)類顯得有點(diǎn)狎昵,可能這兩個(gè)類本應(yīng)該在一起,而不應(yīng)該分家。

·過(guò)度耦合的信息鏈

"計(jì)算機(jī)是這樣一門科學(xué),它相信可以通過(guò)添加一個(gè)中間層解決任何問(wèn)題",所以往往中間層會(huì)被過(guò)多地追加到程序中。如果你在代碼中看到需要獲取一個(gè)信息,需要一個(gè)類的方法調(diào)用另一個(gè)類的方法,層層掛接,就象輸油管一樣節(jié)節(jié)相連。這往往是因?yàn)殂暯訉犹嘣斐傻?,需要查看就否有可移除的中間層,或是否可以提供更直接的調(diào)用方法。

·各立山頭干革命

如果你發(fā)現(xiàn)有兩個(gè)類或兩個(gè)方法雖然命名不同但卻擁有相似或相同的功能,你會(huì)發(fā)現(xiàn)往往是因?yàn)殚_發(fā)團(tuán)隊(duì)協(xié)調(diào)不夠造成的。筆者曾經(jīng)寫了一個(gè)頗好用的字符串處理類,但因?yàn)闆](méi)有及時(shí)通告團(tuán)隊(duì)其他人員,后來(lái)發(fā)現(xiàn)項(xiàng)目中居然有三個(gè)字符串處理類。革命資源是珍貴的,我們不應(yīng)各立山頭干革命。

·不完美的設(shè)計(jì)

在筆者剛完成的一個(gè)比對(duì)報(bào)警項(xiàng)目中,曾安排阿朱開發(fā)報(bào)警模塊,即通過(guò)Socket向指定的短信平臺(tái)、語(yǔ)音平臺(tái)及客戶端報(bào)警器插件發(fā)送報(bào)警報(bào)文信息,阿朱出色地完成了這項(xiàng)任務(wù)。后來(lái)用戶又提出了實(shí)時(shí)比對(duì)的需求,即要求第三方系統(tǒng)以報(bào)文形式向比對(duì)報(bào)警系統(tǒng)發(fā)送請(qǐng)求,比對(duì)報(bào)警系統(tǒng)接收并響應(yīng)這個(gè)請(qǐng)求。這又需要用到Socket報(bào)文通訊,由于原來(lái)的設(shè)計(jì)沒(méi)有將報(bào)文通訊模塊獨(dú)立出來(lái),所以無(wú)法復(fù)用阿朱開發(fā)的代碼。后來(lái)我及時(shí)調(diào)整了這個(gè)設(shè)計(jì),新增了一個(gè)報(bào)文收發(fā)模塊,使系統(tǒng)所有的對(duì)外通訊都復(fù)用這個(gè)模塊,系統(tǒng)的整體設(shè)計(jì)也顯得更加合理。

每個(gè)系統(tǒng)都或多或少存在不完美的設(shè)計(jì),剛開始可能注意不到,到后來(lái)才會(huì)慢慢凸顯出來(lái),此時(shí)唯有勇于更改才是最好的出路。

·缺少必要的注釋

雖然許多軟件工程的書籍常提醒程序員需要防止過(guò)多注釋,但這個(gè)擔(dān)心好象并沒(méi)有什么必要。往往程序員更感興趣的是功能實(shí)現(xiàn)而非代碼注釋,因?yàn)榍罢吒軒?lái)成就感,所以代碼注釋往往不是過(guò)多而是過(guò)少,過(guò)于簡(jiǎn)單。人的記憶曲線下降的坡度是陡得嚇人的,當(dāng)過(guò)了一段時(shí)間后再回頭補(bǔ)注釋時(shí),很容易發(fā)生"提筆忘字,愈言且止"的情形。

曾在網(wǎng)上看到過(guò)微軟的代碼注釋,其詳盡程度讓人嘆為觀止,也從中體悟到了微軟成功的一個(gè)經(jīng)驗(yàn)。

js組合算法代碼轉(zhuǎn)成java代碼

不必轉(zhuǎn)換,我早已熟透組合排列算法:java如下

import?java.util.Arrays;

import?java.util.LinkedList;

public?class?Guy

{

public?static?void?recursionSub?(?LinkedListint[]?list,?int?count,?int[]?array,?int?ind,?int?start,?int...?indexs?)

{

start++;

if?(start??count?-?1)

{

return;

}

if?(start?==?0)

{

indexs?=?new?int[array.length];

}

for?(?indexs?=?ind;?indexs??array.length;?indexs++?)

{

recursionSub?(list,?count,?array,?indexs?+?1,?start,?indexs);

if?(start?==?count?-?1)

{

int[]?temp?=?new?int[count];

for?(?int?i?=?count?-?1;?i?=?0;?i--?)

{

temp[start?-?i]?=?array[indexs[start?-?i]];

}

list.add?(temp);

}

}

}

public?static?void?main?(?String[]?args?)

{

int[]?array?=?{?1,?2,?3,?4,?5,?6,?7,?8,?9?};

LinkedListint[]?list?=?new?LinkedListint[]?();

recursionSub?(list,?3,?array,?0,?-1);

for?(?int[]?strings?:?list?)

{

System.out.println?(Arrays.toString?(strings));

}

}

}

當(dāng)前標(biāo)題:js代碼重構(gòu)java 前端代碼重構(gòu)
標(biāo)題URL:http://muchs.cn/article30/hjceso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷推廣關(guān)鍵詞優(yōu)化、軟件開發(fā)網(wǎng)站營(yíng)銷、面包屑導(dǎo)航動(dòng)態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)