請把不聽話的【return】關進【class】這個籠子

来源:http://www.cnblogs.com/piapia/archive/2016/02/27/5223064.html
-Advertisement-
Play Games

powershell的return使用方法研究,案例詳解。



請把不聽話的【return】關進【class】這個籠子

 

 

問:powershell 最垃圾的語句是什麼?
答:(函數中的)return

#例子1:函數中的return有時會返回所有內容,而不是你想要的內容,如:
function aaa
{
    return 'bbb'
}

function ccc
{
    aaa
    return 'ddd'
}

ccc     #ccc函數不光返回了我們想要的值ddd,還把aaa函數的返回值bbb返回了。 

 

-----------------我們心目中return的作用--------------------

我們用return想實現2個功能:
1 只返回1---n 個,我們想要的結果。
2 結束當前函數。-----這個功能可以用空的return來實現。
總之,不建議在函數中,用return後面加變數返回內容。


---------------解決方案1---------------

函數中有return,函數中又用了.net方法的情況。請在.net方法前加[void],這樣就不會帶出多餘數據。

 

powershell 傳教士 原創文章 2014-07-18 2014-10-10 2015-03-22 2016-02-27更新,允許轉載,但必須保留名字和出處,否則追究法律責任

---------------解決方案2 貌似不靈---------------

使用

return ,$我想要的返回值

return @(,$我想要的返回值)


---------------解決方案3 在函數外面,用 -is [array]判斷返回值是單一,還是多個。推薦 ---------------

#例子2:
if  ($函數名  -is [array])
{
    $我想要的返回值 = $函數名[-1]
}
else
{
    $我想要的返回值 = $函數名
}

 

---解決方案3變種,既然返回值或許是數組,那麼就可以取第一個,或最後一個值---

#例子3:有個缺點,必須明確知道返回值個數才行。
function  函數a
{
    $a = 1
    $b = 2
    $c = 3
    return $a,$b,$c
}
$d,$e,$f = 函數a  #函數返回的值,我全要

$g,$null,$null = 函數a  #我只想要函數返回的第一個值
$null,$null,$h = 函數a  #我只想要函數返回的最後一個值
write-host $d,$e,$f,$g,$h

 

---------------解決方案4 diy,直接寫入外部變數---------------

不用return,而用自定義的return2函數,和自定義變數$global:return2保存要返回的內容。

#例子4:直寫外部變數
function  return2($youwant)
{
    $global:return2 = $youwant
}

function aaa
{
    return 'aaa'
}

function bbb
{
    aaa
    return2 'bbb'    #把返回值寫入,或者直接寫變數$global:return2 = 'bbb'
    return
    write-host   "運行不到這裡"
}

write-host   $global:return2  #輸出
$ccc = $global:return2    #讀取

 

------------------------------------------------------------------

#例子5:直寫外部變數變種,給函數傳入【輸出外部變數】
function 函數a($輸入變數值,$輸出變數名_一個不帶s的字元串)
{
    $輸出變數值 = $輸入變數值 + 1
    # 這裡或許有 if
    Set-Variable -Name  $輸出變數名_一個不帶s的字元串     -Value  $輸出變數值
    return
    #這裡或許有 endif
    
    write-host   "如果沒有if,將運行到這裡"

}

函數a   8 "script:aaa"

$script:aaa     #--------------------返回  9,即 8 + 1

 

--------------------------------------------
結論: (函數中的return有壞的特性)
凡是函數中,又調用其他函數,其他函數也有返回值;
凡是函數中有$aaa這樣,把值列印到屏幕的;
凡是函數中有write-output $aaa列印屏幕的;
用了return 都會有問題。

 

---------------解決方案5 把不聽話的【return】關進這個【class】籠子 推薦 ---------------

ps 5.0 類的關鍵字:
hidden 不想被別人用的隱藏屬性
static 靜態關鍵字
$this 本類的對象


powershell5.0 中的 class 類的研究:
1 類中不能 function xxx {}這樣定義函數 。只能定義方法。
2 類中不能調用ps命令,不能調用ps函數。只能定義方法,併在方法中用命令,然後用return 返回數據。
3 類中可以用$a=5,但不能用$a=5;$a。
4 類中可以用$a=[aaa]::bbb(),但不能用[aaa]::bbb() 。
5 函數中可以定義類。
6 類名,類的屬性名,類的方法名,都可以是中文。
7 類如果不用new新建,就不能調用其中的方法,除非方法帶有 static (靜態方法)首碼。類如果不用new新建,就不能使用其中的屬性,除屬性帶有 static (靜態變數)首碼。


類引發的好處:
由上述2可知,你不能在類的方法中用write-host,write-output等命令,【直接!】輸出數據。
由上述3,4可知,類的方法不會【直接輸出值!】,即不會返回【不想要的多餘】數據。
類中沒有函數中return的壞特性。

#例子6:把return關入class,編寫不會返回多餘數據的腳本。例子6,實際上是 例子1 的class化改寫。
function aaa
{
    return 'bbb'
}

class ccc
{
    static [string]ddd()
    {
        aaa
        return 'ddd' 
    }
}

[ccc]::ddd()  

 


結論:
不想要多餘的數據?用class改寫你的function。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 上個示例是C#調用windows api在原來代碼上加入窗體透明,控制項不透明代碼: 1 using System; 2 using System.Runtime.InteropServices; 3 using System.Windows.Forms; 4 5 namespace HoverTre
  • 展示層由Ninesky.Web項目實現,負責網站內容的顯示,項目包含Member和Control兩個區域。 Member區域實現網站內容的管理,Control區域實現網站系統管理。結構、功能圖如下: 一、Member區域 1、添加Member區域 Ninesky.Web【右鍵】-> 添加->區域 。...
  • 閱讀目錄基本用法高級用法 本文主要是我在項目中對C#枚舉的使用心得,如有不足的地方歡迎您指出。一、基本介紹  枚舉是由一組特定常量構成的一組數據結構,是值類型的一種特殊形式,當需要一個由指定常量集合組成的數據類型時,使用枚舉類型。枚舉聲明可以顯式地聲明 byte、sbyte、short、us
  • 有文檔,但是,寫文檔的人明白,看文檔的人很有難度。 沒有SDK,要自已寫。 然後,錢的流入流出都必須經過虛擬錢包,提現還要綁取現卡,這個我也能理解,不能理解的是,訂單退款,為什麼要退到虛擬錢包,這個時候要程式來幫用戶綁取現卡,可是這不是用戶主動操作呀。要有密碼呀。可是我們沒有存用戶的密碼呀。 就接了
  • 第一章什麼是xml 電腦里的數據文件分為倆大類,二進位文件和文本文件。 二進位文件是一個比特流(1或0系列),只有創建二進位的應用程式才會理解這個比特流的實際含義。 文本文件也是比特流,文本文件里的比特流是以一種標準格式組織起來的,因此他們總是組成一個個數,每個數再映射為字元。 標記語言的簡史 探
  • 本文分別對Cookie與Session做一個介紹和總結,並分別對兩個知識點進行對比分析,讓大家對Cookie和Session有一個更深入的瞭解,並對自己的開發工作中靈活運用帶來啟示。 cookie機制 Cookies是伺服器在本地機器上存儲的小段文本並隨每一個請求發送至同一個伺服器。IETF RFC
  • 關於這份指南 之前有不少學弟學妹問我如何學習編程,根據DRY法則(Don't Repeat Yourself),還是把自己學習過程中的一些經驗整理成一篇博客吧。由於本人目前也處在學習的階段,文章中列出來的內容也並未全部學習過,所以文章的客觀性可能存在一些問題,還望讀者自行判斷。 這份指南會不定期更新
  • 多少年來,許多的編程語言和工具都包含對正則表達式的支持,.NET基礎類庫中包含有一個名字空間和一系列可以充分發揮規則表達式威力的類,而且它們也都與未來的Perl 5中的規則表達式相容。 此外,regexp類還能夠完成一些其他的功能,例如從右至左的結合模式和表達式的編輯等。 在這篇文章中,我將簡要地介
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...